pythonキーボード自動入力を実現
7409 ワード
Windowsには、アナログキーボードAPI関数Keybd_が用意されています.event()は、キーボードの動作を遮断するために使用されます.Keybd_event()関数は、WM_KEYDOWNまたはWM_KEYUPメッセージを生成するキーイベントをトリガーします.
この関数のプロトタイプは次のとおりです.
VOID keybd_event(
BYTE bVk,//virtual-key code
BYTE bScan,//hardware scan code
DWORD dwFlags,//flags specifying various function options
DWORD dwExtraInfo//additional data associated with keystroke
);
プロトタイプからわかるように、Keybd_event()には4つのパラメータがあります.
例1:アナログ押下’A’キーkeybd_event(65,0,0,0); keybd_event(65,0,KEYEVENTF_KEYUP,0);
例2:アナログ押下’ALT+F 4’キーkeybd_event(18,0,0,0); keybd_event(115,0,0,0); keybd_event(115,0,KEYEVENTF_KEYUP,0); keybd_event(18,0,KEYEVENTF_KEYUP,0);
附:常用アナログキーのキー値対照表(参考も可)http://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx)
アルファベットとテンキーテンキーキーボードのキー機能キーその他のキーキーキーキーキーキーキーキーキーキーキーキーキーコードA 65 0 96 F 112 Backspace 8 B 66 1 97 F 2113 Tab 9 C 67 2 98 F3 114 Clear 12 D 68 3 99 F4 115 Enter 13 E 69 4 100 F5 116 Shift 16 F 70 5 101 F6 117 Control 17 G 71 6 102 F7 118 Alt 18 H 72 7 103 F8 119 Caps Lock 20 I 73 8 104 F9 120 Esc 27 J 74 9 105 F10 121 Spacebar 32 K 75 * 106 F11 122 Page Up 33 L 76 + 107 F12 123 Page Down 34 M 77 Enter 108 – – End 35 N 78 - 109 – – Home 36 O 79 . 110 – – Left Arrow 37 P 80 / 111 – – Up Arrow 38 Q 81 – – – – Right Arrow 39 R 82 – – – – Down Arrow 40 S 83 – – – – Insert 45 T 84 – – – – Delete 46 U 85 – – – – Help 47 V 86 – – – – Num Lock 144 W 87 X 88 Y 89 Z 90 0 48 1 49 2 50 3 51 4 52 5 53 6 54 7 55 8 56 9 57
アナログキーボードは普段あまり使われていませんが、ショートカットキーを呼び出して機能を実行すると、本当に便利ですね.信じないの?次の実現を見て、あなたは大声で叫びます:どうして早く私に教えてくれませんか?ほほほ、もとはblogがなくて、すべてこれらに頼って点数を稼ぎます.デスクトップの表示:
他の操作も同様で、例えば開始した運転を直接表示し、上の「M」を「R」に置き換えればよい.
直接keybd_event(VK_LWIN, 0, 0 ,0); keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);
[開始](Start)ダイアログボックスが直接表示されます.迅速な全選を実現 は、デジタルキー、大文字小文字などの特殊なキーを実行します.以下は、デジタルキーの例bool bState=trueです.//trueはNumLock、false逆BYTE keyState[256]を押す.GetKeyboardState((LPBYTE)&keyState); if( (bState && !(keyState[VK_NUMLOCK] & 1)) || (!bState && (keyState[VK_NUMLOCK] & 1)) ) {//Simulate a key press keybd_event( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 );
4)CTRL+ALT+DELETEの3つのキーを一緒に押したい場合、
ほほほ、これは成功しません.このいくつかのキーは直接オペレーティングシステムで実行されているので、アナログキーボードはアプリケーションにしか送信できません.だから、この方法はできません(ロックダイアログを表示したいので、LockWorkStation()
5)Window 2000/NT/XPはもうこの関数を使うことを提唱していません.上の方法はみんなに考えを広げるために、どのように取って代わるのか、ほほほ、下を見て、だから上のすべてのコードはこれで完成することができます.
//2000でこれに代えて「winable.h」INPUT input[4];memset(input, 0, sizeof(input));
それよりちょっと羅索的な感じがしますが、ほほほ.
====================
WINキーの一部のショートカットキー:
WINキー+D=デスクトップに素早く切り込み、再度クリックして戻る
WINキー+E=Express Open Resource Manager
WINキー+R=「運転」です.
WINキー+M=全ウィンドウ最小化.
WINキー+Shift+M=全ウィンドウ最小化を解除します.
WINキー+F 1=Help.
WINキー+F=「探す」.
WINキー+Ctrl+F=「パソコン検索」が表示されます.
WINキー+Tab=ワークカラムを切り替えるプログラムです.
WINキー+Break=システム内容を表示します.
まずkeybd_を見つけますevent関数にはウィンドウハンドルがパラメータとしてないので、好奇心のあるあなたはきっとおかしいと思います.それはkeybd_eventはグローバルシミュレーションキーであり、フロントウィンドウ(現在のアクティブウィンドウ)のみでよいが、シミュレーションキーがちょうどウィンドウのグローバルホットキーメッセージである場合、そのウィンドウも受信できる
一方、SendMessage、PostMessageは、指定したハンドルウィンドウに作用し、いくつかのフックを作るのに役立ちます.例えば、あるウィンドウで動作をシミュレートしながら、自分が他のウィンドウで他のことをすることができ、互いに影響しないという効果が得られます.
しかし、キーボードメッセージをシミュレートするとき、WM_をシミュレートするのを忘れる人が多いことに注意してください.KEYUPのメッセージ..
もう一つ、PostMessageのウィンドウハンドルパラメータは、HWND_に設定できます.BROADCAST、すなわちブロードキャストですが、当然ながらすべてのウィンドウに役立つとは思わないでください!!!システムの最上位ウィンドウにのみ機能し、サブウィンドウはこのメッセージを受信できません!!!
注意しなければならないのは、SendMessageにはHWNDがありません.BROADCASTパラメータの、それは、SendMessageがいつも送信したメッセージが対応するウィンドウメッセージキューで処理されてから戻ってくるので(これは責任ある行為です)、よく考えてみるとなぜSendMessageにHWND_BROADCASTパラメータがないのかがわかります!!
個人的には
1.アナログキーボード入力コマンドが必要な場合、例えばCtrl+V、keybd_を選択event;
2.アナログキーボードに文字列を入力する必要がある場合、PostKeybdMessageを選択します.
3.アナログキーボードで1文字入力が必要な場合はkeybd_を選択event.
SendMessage(Button.Handle,WM_LBUTTONDOWN,0,0);マウスの左ボタンでSendMessage(Button.Handle,WM_LBUUTTONUP,0,0)を押します.マウスの左ボタンでSendMessage(Edit.Handle,WM_SETTEXT,255,Integer);伝達テキストSendMessage(Edit.Handle,WM_Char,Wparam(‘Q’),2);伝達文字SendMessage(Button.Handle,BM_SETSTYLE,BS_RADIOBUTTON,1);ButtonスタイルSendMessage(ComboBox.Handle,CB_SETDROPPEDWIDTH,300,0)を変更します.CBDownWidth WMを変更CUT、WM_COPYとWM_PASTEカット、コピー、貼り付け
任意の結合キーkeybd_を実現event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0); keybd_event(ord(‘V’), MapVirtualKey(ord(‘V’), 0), 0, 0); keybd_event(ord(‘V’), MapVirtualKey(ord(‘V’), 0), KEYEVENTF_KEYUP, 0); keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);
シミュレーションマウス押下イベント::PostMessage(hwd 0,WM_MOUSEMOVE,MK_LUTTON,MAKELONG(x,y);:PostMessage(hwd0,WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(x,y));::PostMessage(hwd0,WM_LBUTTONUP,MK_LBUTTON,MAKELPARAM(x,y));
シミュレーションキーボード押下イベントkeybd_event(VK_TAB,0,0,0); keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0);
変換元:https://blog.csdn.net/zhanglidn013/article/details/35988381
この関数のプロトタイプは次のとおりです.
VOID keybd_event(
BYTE bVk,//virtual-key code
BYTE bScan,//hardware scan code
DWORD dwFlags,//flags specifying various function options
DWORD dwExtraInfo//additional data associated with keystroke
);
プロトタイプからわかるように、Keybd_event()には4つのパラメータがあります.
, vk_return, tab vk_tab( : );
, , 0 ;
, keydown 0 , keyup "KEYEVENTF_KEYUP";
0 。
例1:アナログ押下’A’キーkeybd_event(65,0,0,0); keybd_event(65,0,KEYEVENTF_KEYUP,0);
例2:アナログ押下’ALT+F 4’キーkeybd_event(18,0,0,0); keybd_event(115,0,0,0); keybd_event(115,0,KEYEVENTF_KEYUP,0); keybd_event(18,0,KEYEVENTF_KEYUP,0);
附:常用アナログキーのキー値対照表(参考も可)http://msdn.microsoft.com/en-us/library/dd375731(v=vs.85).aspx)
アルファベットとテンキーテンキーキーボードのキー機能キーその他のキーキーキーキーキーキーキーキーキーキーキーキーキーコードA 65 0 96 F 112 Backspace 8 B 66 1 97 F 2113 Tab 9 C 67 2 98 F3 114 Clear 12 D 68 3 99 F4 115 Enter 13 E 69 4 100 F5 116 Shift 16 F 70 5 101 F6 117 Control 17 G 71 6 102 F7 118 Alt 18 H 72 7 103 F8 119 Caps Lock 20 I 73 8 104 F9 120 Esc 27 J 74 9 105 F10 121 Spacebar 32 K 75 * 106 F11 122 Page Up 33 L 76 + 107 F12 123 Page Down 34 M 77 Enter 108 – – End 35 N 78 - 109 – – Home 36 O 79 . 110 – – Left Arrow 37 P 80 / 111 – – Up Arrow 38 Q 81 – – – – Right Arrow 39 R 82 – – – – Down Arrow 40 S 83 – – – – Insert 45 T 84 – – – – Delete 46 U 85 – – – – Help 47 V 86 – – – – Num Lock 144 W 87 X 88 Y 89 Z 90 0 48 1 49 2 50 3 51 4 52 5 53 6 54 7 55 8 56 9 57
アナログキーボードは普段あまり使われていませんが、ショートカットキーを呼び出して機能を実行すると、本当に便利ですね.信じないの?次の実現を見て、あなたは大声で叫びます:どうして早く私に教えてくれませんか?ほほほ、もとはblogがなくて、すべてこれらに頼って点数を稼ぎます.
, , , win WIN ( CTRL ALT win ), , .
keybd_event(VK_LWIN, 0, 0 ,0); keybd_event(‘M’, 0, 0 ,0); keybd_event(‘M’, 0, KEYEVENTF_KEYUP ,0); keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0); 他の操作も同様で、例えば開始した運転を直接表示し、上の「M」を「R」に置き換えればよい.
直接keybd_event(VK_LWIN, 0, 0 ,0); keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP,0);
[開始](Start)ダイアログボックスが直接表示されます.
, listctrl , listctrl , 。 CTRL+A, , , ?
keybd_event(VK_CONTROL, (BYTE)0, 0 ,0); keybd_event(‘A’,(BYTE)0, 0 ,0);//ここでは「A」、(BYTE)65、「a」では機能しない.keybd_event(‘A’, (BYTE)0, KEYEVENTF_KEYUP,0); keybd_event(VK_CONTROL, (BYTE)0, KEYEVENTF_KEYUP,0); // Simulate a key release
keybd_event( VK_NUMLOCK,
0x45,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);
} 4)CTRL+ALT+DELETEの3つのキーを一緒に押したい場合、
keybd_event(VK_CONTROL, 0, 0 ,0);
keybd_event(VK_MENU,0, 0 ,0);
keybd_event(VK_DELETE,0, 0 ,0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP ,0);
keybd_event(VK_MENU,0, KEYEVENTF_KEYUP ,0);
keybd_event(VK_DELETE,0, KEYEVENTF_KEYUP ,0);
ほほほ、これは成功しません.このいくつかのキーは直接オペレーティングシステムで実行されているので、アナログキーボードはアプリケーションにしか送信できません.だから、この方法はできません(ロックダイアログを表示したいので、LockWorkStation()
5)Window 2000/NT/XPはもうこの関数を使うことを提唱していません.上の方法はみんなに考えを広げるために、どのように取って代わるのか、ほほほ、下を見て、だから上のすべてのコードはこれで完成することができます.
//2000でこれに代えて「winable.h」INPUT input[4];memset(input, 0, sizeof(input));
input[0].type = input[1].type = input[2].type = input[3].type = INPUT_KEYBOARD;
input[0].ki.wVk = input[3].ki.wVk = VK_LWIN;
input[1].ki.wVk = input[2].ki.wVk = 'R';
// , 。
input[2].ki.dwFlags = input[3].ki.dwFlags = KEYEVENTF_KEYUP;
input[0].ki.time = input[1].ki.time = input[2].ki.time = input[3].ki.time = GetTickCount();
SendInput(4, input, sizeof(INPUT));
それよりちょっと羅索的な感じがしますが、ほほほ.
====================
WINキーの一部のショートカットキー:
WINキー+D=デスクトップに素早く切り込み、再度クリックして戻る
WINキー+E=Express Open Resource Manager
WINキー+R=「運転」です.
WINキー+M=全ウィンドウ最小化.
WINキー+Shift+M=全ウィンドウ最小化を解除します.
WINキー+F 1=Help.
WINキー+F=「探す」.
WINキー+Ctrl+F=「パソコン検索」が表示されます.
WINキー+Tab=ワークカラムを切り替えるプログラムです.
WINキー+Break=システム内容を表示します.
SendMessage keybd_event PostMessage
まずkeybd_を見つけますevent関数にはウィンドウハンドルがパラメータとしてないので、好奇心のあるあなたはきっとおかしいと思います.それはkeybd_eventはグローバルシミュレーションキーであり、フロントウィンドウ(現在のアクティブウィンドウ)のみでよいが、シミュレーションキーがちょうどウィンドウのグローバルホットキーメッセージである場合、そのウィンドウも受信できる
一方、SendMessage、PostMessageは、指定したハンドルウィンドウに作用し、いくつかのフックを作るのに役立ちます.例えば、あるウィンドウで動作をシミュレートしながら、自分が他のウィンドウで他のことをすることができ、互いに影響しないという効果が得られます.
しかし、キーボードメッセージをシミュレートするとき、WM_をシミュレートするのを忘れる人が多いことに注意してください.KEYUPのメッセージ..
もう一つ、PostMessageのウィンドウハンドルパラメータは、HWND_に設定できます.BROADCAST、すなわちブロードキャストですが、当然ながらすべてのウィンドウに役立つとは思わないでください!!!システムの最上位ウィンドウにのみ機能し、サブウィンドウはこのメッセージを受信できません!!!
注意しなければならないのは、SendMessageにはHWNDがありません.BROADCASTパラメータの、それは、SendMessageがいつも送信したメッセージが対応するウィンドウメッセージキューで処理されてから戻ってくるので(これは責任ある行為です)、よく考えてみるとなぜSendMessageにHWND_BROADCASTパラメータがないのかがわかります!!
個人的には
1.アナログキーボード入力コマンドが必要な場合、例えばCtrl+V、keybd_を選択event;
2.アナログキーボードに文字列を入力する必要がある場合、PostKeybdMessageを選択します.
3.アナログキーボードで1文字入力が必要な場合はkeybd_を選択event.
SendMessage(Button.Handle,WM_LBUTTONDOWN,0,0);マウスの左ボタンでSendMessage(Button.Handle,WM_LBUUTTONUP,0,0)を押します.マウスの左ボタンでSendMessage(Edit.Handle,WM_SETTEXT,255,Integer);伝達テキストSendMessage(Edit.Handle,WM_Char,Wparam(‘Q’),2);伝達文字SendMessage(Button.Handle,BM_SETSTYLE,BS_RADIOBUTTON,1);ButtonスタイルSendMessage(ComboBox.Handle,CB_SETDROPPEDWIDTH,300,0)を変更します.CBDownWidth WMを変更CUT、WM_COPYとWM_PASTEカット、コピー、貼り付け
任意の結合キーkeybd_を実現event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0); keybd_event(ord(‘V’), MapVirtualKey(ord(‘V’), 0), 0, 0); keybd_event(ord(‘V’), MapVirtualKey(ord(‘V’), 0), KEYEVENTF_KEYUP, 0); keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);
シミュレーションマウス押下イベント::PostMessage(hwd 0,WM_MOUSEMOVE,MK_LUTTON,MAKELONG(x,y);:PostMessage(hwd0,WM_LBUTTONDOWN,MK_LBUTTON,MAKELPARAM(x,y));::PostMessage(hwd0,WM_LBUTTONUP,MK_LBUTTON,MAKELPARAM(x,y));
シミュレーションキーボード押下イベントkeybd_event(VK_TAB,0,0,0); keybd_event(VK_TAB,0,KEYEVENTF_KEYUP,0);
変換元:https://blog.csdn.net/zhanglidn013/article/details/35988381