ページ 1 / 1
署名を貼り付け
Posted: 2008年3月02日(日) 12:13
by 刈谷 真
テキストファイルで右クリックをすると、"署名を貼り付け"と言う項目がでて、
貼り付けてくれるソフトを考えています。
貼り付けのコードはできているのですが、
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long,ByVal wMapType As Long) As Long
Dim data As String
Dim lpText As BytePtr,hText As HGLOBAL
Open "C:\a.txt" For Input As 1
Input #1,data
Close 1
hText=GlobalAlloc(GMEM_DDESHARE Or GMEM_MOVEABLE,Len(data)+1)
lpText=GlobalLock(hText)
lstrcpy(lpText,StrPtr(data))
GlobalUnlock(hText)
OpenClipboard(0)
EmptyClipboard()
SetClipboardData(CF_TEXT,hText)
CloseClipboard()
'GlobalFree(hText)
Sleep(200)
keybd_event(VK_CONTROL,MapVirtualKey(VK_SNAPSHOT,0),0,0)
keybd_event(Asc("V"),MapVirtualKey(VK_SNAPSHOT,0),0,0)
keybd_event(Asc("V"),MapVirtualKey(VK_SNAPSHOT,0),KEYEVENTF_KEYUP,0)
keybd_event(VK_CONTROL,MapVirtualKey(VK_SNAPSHOT,0),KEYEVENTF_KEYUP,0)
右クリックに、"署名を貼り付け"と言う項目を載せる所で悩んでます。
前回のようにレジストリを変えるのでしょうか
教えてください。
Posted: 2008年3月02日(日) 14:18
by konisi
書いた文章 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]こんなコードを作ってみましたが、どうでしょう?
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Declare Function AppendMenu Lib "USER32.DLL" Alias "AppendMenuA" (hMenu As HMENU,uFlags As DWord,uIDNewItem As DWord,lpNewItem As *Byte) As Long
Dim hMenu_RightMenu As HMENU
Const hMenu_RightMenu_ID1 = 10001
Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
Dim pa As POINTAPI
Select Case dwMsg
Case WM_RBUTTONUP
pa.x=LOWORD(lParam)
pa.y=HIWORD(lParam)
ClientToScreen(hWnd,pa)
TrackPopupMenu(hMenu_RightMenu,TPM_LEFTALIGN,pa.x,pa.y,0,hMainWnd,ByVal 0)
Case WM_COMMAND
Select Case LOWORD(wParam)
Case hMenu_RightMenu_ID1
MessageBox(hMainWnd,"Test OK","ok",MB_OK)
MainWndProc=0
Exit Function'イベントプロシージャ側で使える情報はなくなった
End Select
End Select
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
Sub MainWnd_Destroy()
DestroyMenu(hMenu_RightMenu)
TestMenu_DestroyObjects()'プロジェクト名によって異なる。
PostQuitMessage(0)
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
hMenu_RightMenu=CreatePopupMenu()
AppendMenu(hMenu_RightMenu,0,hMenu_RightMenu_ID1,"TEST")
End Sub
よく見たら読み違えていました。すみません。
テキストファイルに限らないのであれば、次の方法が使えます。
レジストリHKEY_CLASSES_ROOT\*\shellのサブキーに適当な名前のキーを追加し、規定値を「署名を貼り付け」にします。
次に、commandという名前のキーを先ほど作ったキーのサブキーに追加します。
commandの規定値を、実行ファイルに渡されるコマンドにします。ファイル名は%1等としてください。
例:
HKEY_CLASSES_ROOT\*\shell\append = 署名を貼り付け
HKEY_CLASSES_ROOT\*\shell\append\command = C:\Test.exe "%1"
Posted: 2008年3月02日(日) 14:54
by 刈谷 真
konisiさん、ありがとうございます。
ABのテキストエディターと組み合せて使おうと思います。
こういうインターネット上の入力の時にも貼り付けれるようにしたいのですが、
レジストリを変更して、右クリックのメニューに項目を追加できるのでしょうか
Posted: 2008年3月02日(日) 15:05
by konisi
IEのメニューに追加する場合は、ABだけでは無理のようです。
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt
のサブキーにメニュー名のキーを追加し、その規定値をスクリプトの書かれたhtmlファイルへのfile://付き絶対パスにします。
また、contextsというDWORD値に色々書いて、呼び出し時の設定を行えるようです。
某ページに掲載されていた定数。論理和を取って使う。 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]Const CONTEXT_MENU_DEFAULT = &H1 '通常右クリックした時
Const CONTEXT_MENU_IMAGE = &H2 'イメージを右クリックした時
Const CONTEXT_MENU_CONTROL = &H4 'コントロールを右クリックした時
Const CONTEXT_MENU_TABLE = &H8 'テーブルを右クリックした時
Const CONTEXT_MENU_TEXTSELECT = &H10 'テキストを選択して右クリックした時
Const CONTEXT_MENU_ANCHOR = &H20 'アンカー(リンク)を右クリックした時
Const CONTEXT_MENU_UNKNOWN = &H40 'よくわかんね(^^;
htmlファイルはJavaScriptとVBScriptは使えるようです。JSや他の言語は試してみないと分かりません。
HDDから見つかった、実際に使っているスクリプト(JavaScript等で書かれている。) [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
<SCRIPT LANGUAGE="JavaScript" defer>
var wnd = external.menuArguments;
var doc = wnd.document;
var evt = wnd.event;
var elm = doc.elementFromPoint(evt.clientX, evt.clientY);
var act = doc.activeElement;
var txt = doc.selection.createRange().text
var loc = wnd.location;
var url = loc.href;
while (elm.parentElement) {
if (act.tagName=="A") {
if(act.href.match(/^http/)) {
url = act.href;
}
break;
}
else if (doc.selection) {
if (txt.match(/[\w-]\.[a-z]{2}/)) {
url = txt.replace(/\s/g,"");
url = url.replace(/^(h|)ttp:\/\//,"");
url = "http://"+url;
}
break;
}
elm = elm.parentElement;
}
url = url.replace(/^http:\/\/ime\.nu\//,"http://");
</SCRIPT>
<SCRIPT language="VBScript" defer>
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run Chr(34) & "I:\Program Files\SmileDownloader\SmileDownloader.exe" & Chr(34) & " " & Chr(34) & url & Chr(34), 1
</SCRIPT>
Posted: 2008年3月02日(日) 15:08
by 刈谷 真
いろいろ大変そうですね・・・
ありがとうございます、勉強してみます。