• 締切済み

VC++でCtrl+Vを操作させたい

VC++のプログラミングで、他のアプリケーションを操作するものを作っているのですが、そこでテキストスペースにCtrl+Vでの張り付けを操作させたいのですが、うまくいきません。 SendMessage(hWndSysLV, WM_KEYDOWN, VK_CONTROL, 0); SendMessage(hWndSysLV, WM_KEYDOWN, 0x56, 0); SendMessage(hWndSysLV, WM_KEYUP, VK_CONTROL, 0); SendMessage(hWndSysLV, WM_KEYUP, 0x56, 0); では不可能なようなのですが、何か方法がありましたらアドバイスいただけるとありがたいです。

みんなの回答

回答No.1

SendMessage(hWndSysLV, WM_PASTE, 0, 0); ではどうでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Ctrl + P のメッセージ送信

    印刷ダイアログを起動させるために Ctrl + P をメッセージ送信しようとしているのですが 書きのように記述しても実現できませんでした. ご存知の方がおりましたら、ご回答いただけませんでしょうか。 PostMessage hwindow, WM_KEYDOWN, 17, 0 PostMessage hwindow, WM_KEYDOWN, 80, 0 PostMessage hwindow, WM_KEYUP, 80, 0 PostMessage hwindow, WM_KEYUP, 17, 0

  • WM_KEYDOWNでPrtScを捕まえる方法??

    ごく普通のウィンドウプロシージャでキーの判別を行っています 下記のように条件(1)が WM_KEYUP の際には(2)、(3)ともに検出します LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_KEYUP: ............ (1) switch(wp) { case VK_RETURN: { break; } ..... (2) case VK_SNAPSHOT: { break; } ..... (3) default: { break; } } break; } return; ところが条件(1)を WM_KEYDOWN に変更すると(2)の Enter は検出しますが、(3)の PrtSc を検出してくれません 質問1 なぜ PrtSc を WM_KEYDOWN では検出しないのですか? 質問2 WM_KEYUP WM_KEYDOWN のいずれか一方にしか反応しないキーはまだありますか? 質問3 どのようにしたら PrtSc の WM_KEYDOWN を捕まえることが出来ますか? 自分でも調べてみましたが、どうも判然と致しません 宜しくご指導のほどお願い申し上げます

  • VC++2005での他のアプリ操作について

    VC++2005でWindowsフォームアプリケーション形式でプロジェクトを作成し、他の人が作成したWindow形式のtextboxやコンボボックスなどが存在するソフトを操作したいのですが、どなたかご教示いただけないでしょうか。 環境はOS:Windos vista 開発ソフト:Microsoft Visual Studio C++ 2005 です。 つい先日、同様の質問をし、 ”基本的にはFindWindow、EnumWindowとかでアプリケーションのトップウィンドウを探して、さらにEnumChildWindow、GetDlgItemとかでテキストボックスやコンボボックスを探して操作。 ボタンを押すのは、トップウィンドウに対してSendMessage(WM_COMMAND,~);とかでできるかと思います。” と教えていただいたのですがWindowsフォームアプリケーション形式では使えないような感じなのでどうすればいいのかわかりません。 大変困っています。よろしくお願い致します。

  • Ctrl+Vのキーストロークを合成したいのですが

    Ctrl+Vのキーストロークを合成して、クリップボードの内容を貼り付けたいと考えています。 いろいろ調べた結果、大体以下のように記述すればよいのではないかとおもったのですが記述に間違いがあるようです。(form上のText1内に張り付けることができません。)恐れ入りますが、何卒ご教授いただきたくお願いいたします。 Option Explicit Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _ ByVal bScan As Byte, _ ByVal dwFlags As Long, _ ByVal dwExtraInfo As Long) Private Const KEYEVENTF_EXTENDEDKEY = &H1 Private Const KEYEVENTF_KEYUP = &H2 Private Const VK_CONTROL = &H11 Private Sub Command1_Click() Call keybd_event(VK_CONTROL, 0, 0, 0) Call keybd_event(Asc("V"), 0, 0, 0) Call keybd_event(Asc("V"), 0, KEYEVENTF_KEYUP, 0) Call keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0) End Sub ちなみに使用目的につきましては、form1上のWebBrowser1に開いた入力フォームの<input type="file" >に(JavaScriptでフォーカスを移したうえで)ファイルのパスを貼り付けることです。 <input type="file" >はvalueを指定できないようなので、色々考えた結果、上記のようにするしかないかと考えました。もしもほかによい方法があったら恐れ入りますがご教授いただけると大変ありがたいです。よろしくお願いします。

  • 最初に押されたキーを調べるには?

    下のプログラムではCTRLを押しながらAを押しても、Aを押しながらCTRLを押してもメッセージボックスが表示されます。 これをCTRLを押しながらAを押した場合だけメッセージボックスを表示するように変えたいのですが、2つのキーが押されている時に最初に押されたキーを調べる方法がわかりません。 どうすればいいでしょうか? case WM_KEYDOWN: if( (GetKeyState(VK_CONTROL)<0) && (GetKeyState(0x41)<0)){ MessageBox(hWnd,TEXT("CTRL+Aが押されました。"),TEXT("テスト"),MB_OK); } --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語

  • Excel VBAでIE「ダウンロードの表示」生成

     Internet Explorer で、「ダウンロードの表示」のDialogウィンドウをショートカット(Ctrl + J )を使って表示させたいのですが、Excel VBA で以下のコードで試したのですが、うまくいきません。どういうコードを書いたらよいのでしょうか?アクセスキーを使った方法では、「ツール」で N  に該当するのが「ダウンロードの表示」と「Send To Note」の2つあって起動できません。  よろしくお願いします。 Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" _ (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ ByVal lParam As Long) As Long Public Const WM_KEYDOWN = &H100 Public Const WM_KEYUP = &H101 Public Const VK_CONTROL = &H11 Public Const VK_J = &H4A Public Const navOpenInNewTab = &H800 Sub Test() Dim objIE As Object Dim hWnd_objIE As Long Dim Ret As Long 'IE起動 Set objIE= CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.navigate "https://www.google.co.jp/", navOpenInNewTab Do While objIE.Busy = True Or objIE.readyState <> 4 DoEvents Loop 'objIEのhWnd取得 hWnd_objIE = objIE.hwnd 'IEの親ウィンドウのhWnd取得する 'hWnd_objIE のウィンドウにPostMessageする Ret = PostMessage(hWnd_objIE, WM_KEYDOWN, VK_CONTROL, 0) Ret = PostMessage(hWnd_objIE, WM_KEYDOWN, VK_J, 0) Sleep 100 Ret = PostMessage(hWnd_objIE, WM_KEYUP, VK_CONTROL, 0) Ret = PostMessage(hWnd_objIE, WM_KEYUP, VK_J, 0) End Sub

  • VC++のLV_KEYDOWNについて

    キーボードのショートカット処理の関数を作成しているのですが、Ctrl + sでデフォルトの保存処理ではなく 別の処理を作成したいと考えております。 ですが下記のように実装してもCtrl + sを検出できません。(Ctrl + a)は検出するのですが。 何か原因があるのでしょうか? ご存知の方がいましたらご教授いただけないでしょうか? void OnKeydown(NMHDR* pNMHDR, LRESULT* pResult) { LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR; SHORT nCtrl = 0; switch(pLVKeyDow->wVKey) { case 's': case 'S': nCtrl = GetKeyState(VK_CONTROL); if(nCtrl >= 0) { // Ctrlキーが押下されていない場合 break; } // Ctrl + sの処理 break; case 'a': case 'A': nCtrl = GetKeyState(VK_CONTROL); if(nCtrl >= 0) { // Ctrlキーが押下されていない場合 break; } // Ctrl + aの処理 break; } *pResult = 0; }

  • Alt+P,Alt+NをPostmessageで送るには

    あるアプリがあり、そのハンドルを取得してからメッセージを送るプログラムを作っています。 PageUp,PageDownをそれぞれAlt+P,Alt+Nに変換して送るものです。 関数・定数宣言部は省略しています。 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)   Dim hTest As Long   hTest = FindWindow(vbNullString, "Test")   If KeyCode = 33 Then 'PageUp     PostMessage MPL, WM_SYSKEYDOWN, VK_ALT, 0     PostMessage MPL, WM_KEYDOWN, VK_N, 0     PostMessage MPL, WM_KEYUP, VK_N, 0     PostMessage MPL, WM_SYSKEYUP, VK_ALT, 0   ElseIf KeyCode = 34 Then 'PageDown     PostMessage MPL, WM_SYSKEYDOWN, VK_ALT, 0     PostMessage MPL, WM_KEYDOWN, VK_P, 0     PostMessage MPL, WM_KEYUP, VK_P, 0     PostMessage MPL, WM_SYSKEYUP, VK_ALT, 0   End If End Sub 送り先(Test.exe)では、 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)   Dim L As String   L = ""   If Shift = 4 Then L = "Alt + "   Label1.Caption = L & KeyCode End Sub ラベルで「Alt+P」などが来ているかどうか見ています。こちらのウィンドウで「Alt+P」を押すとちゃんと表示されます。 しかし、この2つを組み合わせるとPのみやNのみしか送られてきません。どこかおかしいのでしょうか。 Alt+PなどをPostMessageで送る方法でよい方法があれば、お教え下さい。 よろしくお願いします。

  • vbで[ctrl]+[tab]を認識させるにはどうしたらよいでしょうか?

    はじめまして、どうしてもうまくいきません。教えてくださいませ。 [ctrl]+[tab]キー入力を認識させるにはどうしたら良いでしょうか? 現在、VBでMDIフォームを使用してプログラムを作っております。 [ctrl]+[tab]キー入力を行なうと、子フォーム間でフォームの移動が起こってしまいます。CommandButton押下時にのみ、フォームの移動を行なうようにしたいので、 [ctrl]+[tab]キー入力を制御して実現させようとしているのですが、うまくいきません。 MSDNライブラリには、KeyUpとKeyDownのイベントで Tabキーの操作は発生しないと書いてありました。。。 何か方法がありましたらお教えいただけると助かります。 どうぞよろしくお願いします。

  • visualstudioについて

    visual studio2008 c++ を使用しています. ダイアログ形式でアプリケーションを作成しています. ボタンを押すと画像のようなアプリケーションを起動してenterキーを送るようにしたいのですがうまく出来ません. void CMy6Dlg::OnBnClickedButton1() { // TODO: ここにコントロール通知ハンドラ コードを追加します。 HINSTANCE ret = ShellExecute(m_hWnd, "open", "---Release\\scip_20_gd.exe", NULL, NULL, SW_SHOW); HWND hWnd = ::FindWindowEx(NULL, NULL, NULL, "---Release\scip_20_gd.exe"); ::SendMessage(hWnd,WM_SETFOCUS,0,0); ::SendMessage(hEdit, WM_KEYDOWN, VK_RETURN,0); if (ret <= (HINSTANCE)32) AfxMessageBox("シェル処理ができません.", MB_OK); } よろしくお願いします.