Win32API質問箱 Build125
■ このスレッドは過去ログ倉庫に格納されています
>>92 まだ改元された訳じゃないからそれで正しい 5/1 以降は動作が変わるはず >>92 運転免許の表記がH35だが、勝手にRに変えられても困る S64年からH1年 と書くようになった時、たぶんあまり違和感を感じなかったと思うが R1年ってなんか妙だな R1とか書かれたら国一と勘違いしそう 自作アプリで、他アプリがアクティブなときでもマウスイベントを監視するために、 SetWindowsHookEx(WH_MOUSE_LL, HookProc, hmod, 0); とすると、確かにHookProcが呼ばれますが、 アクティブな他アプリが管理者特権あり(タスクマネージャとか)だと呼ばれません。 その場合でも、自作アプリが管理者特権ありで実行されていれば、 ちゃんとHookProcが呼ばれます。 自作アプリを管理者特権なしの通常の実行時でも、 タスクマネージャとかがアクティブなときのマウスイベントを監視するには どうすればいいのでしょうか? フリーソフトのX-Mouse Button Controlとか、StrokesPlusとか、 ではできているようなので、なにかしら方法はあると思うのですが。 (win10, 64bit) 自分より上位の権限で動作してるプログラムの動作を盗めちゃったら 特権の意味がないじゃん そういう場合setupでSYSTEMで動くサービスをこっそり仕込んどくんだよ フックを仕込むプロセスを管理者権限で起動すればいいだけでは こっそり悪いことをしたいのに、それでは困るんです!! 詳しい人だけレスしてください!! マウスジェスチャツールの類って、 管理者権限アプリがアクティブな時は動作しません、 ってわけにはいかず、 実際、例示したソフトは管理者権限なくても ちゃんと動作してて、これって一体どうやって実現してるんだろう? という純粋な興味と、 できれば管理者権限はあまり濫用したくないのと。 たとえばUACの画面でも動いてるってことは管理者特権で動いてるってことだよ >>103 すでに試しているかもしれないけど、同じようにキーフックとマウスフックする プログラムで試したら、同じようにタスクマネージャがアクティブウィンドウに なっていると反応しなくなったので、アプリ自体を管理者権限で起動したら 動作するようになったよ なので、手作業で管理者権限で実行しなくてもうまく動作するアプリは内部で 権限の取得を行っているんだと思うけど 試していないので分からないけど「"windows10" "管理者権限" 取得 api」 あたりでぐぐるとヒントあるかも エディタボックスの EM_GETFILELINE について教えろ下さい。 指定したファイル(または論理)行のテキストを取得します(テキストの折り返し区切り文字は無視されます)。このマクロを使用するか、EM_GETFILELINEメッセージを明示的に送信することができます。 改元を契機に、OSの日付表示を「和暦」にすることをお勧めしたい。 エクスプローラで日付に曜日をつけられるのは「和暦」だけ。 ファイル一覧の更新日時に曜日が表示されていると便利だよ。 パソコン初心者スレで言ってろよw 曜日が欲しいのにないなら自分で表示すればいいだろ そもそも日付設定を西暦にすると短い書式で曜日表示できないWindows10の仕様は不便だと思うけど、どうよ? タスクバーは非表示にしてるからそいつに頼ることがない >>111 設定→時刻と言語→地域→日付、時刻、地域の追加設定→日付、時刻、または数値の形式の変更→追加の設定→日付タブ→短い形式をyyyy/MM/dd '('ddd')'にする 合紫盾ニ比べて 令和の合字は横幅が広く作られているようだ バグ出るソフト多数 その程度で誤動作するようなソフトはもとからバグまみれなんじゃないか? これすごいよ。試してみてね。 【ソフト名】vista2xp 【URL】http://github.com/katahiromz/vista2xp 【説明】Vista/7/10向けのアプリをXP向けアプリに変換できるかもしれないソフト >>116 最近気にも留めてかなかったけど とうとうスパム業者のレベルにまで落ちぶれたんだな片山 archive.2ch-ranking.net/tech/1407006123.html#97 ここにXPで動かしたいという要望があったから書き込んだのに。。。 マニフェストで、uiAccess='true'とし、オレオレ証明書で署名すると、 自アプリに管理者権限がなくても、 管理者権限ありの他アプリがアクティブな時にもマウスのフックが効くようになりました。 (結果的にはスレ違いだったか?) リストコントロールをLVS_OWNERDATAで仮想リストビューとして使う際、 LVS_EX_FULLROWSELECTを付けていないと、 マウスで先頭からガーっと範囲選択を広げながらスクロールさせてるときに どんどん重くなっていくんだけど、これは防ぎようがないんですかね。 LVS_EX_FULLROWSELECTを付けるとそんなことになはならないです。 確かに、LVS_EX_FULLROWSELECTを付けてないときは、 選択範囲内のY座標に含まれるすべてのアイテムに対して、 先頭カラムの文字の長さを見なければいけないのはわかるんだけど。 やり方かえろ そんなインターフェースが万一速くなってもだれも喜ばない 元号の構造体が「明治、大正、昭和、平成」の4択しか無かったとかいうアホな仕様もアホかも知れないが(Windows31の頃か?) 改元が決まってから今年に入るまで完全放置プレイだったってのも何だかなあ ↓ その構造体の修正も、その単体パッチに含まれてるのよ >>125 完全に横で関係ない話だけど、仮想リストビューって名称が取っつきにくくて分かりにくいと思ってた。 LVS_OWNERDATAって名前付けてくれてマジありがとうだった思い出。 >>126 ユーザーから指摘された挙動です。 マウスで範囲選択できるリストビューというのは普通だし、 項目が多いから仮想リストにするのも別に間違ってないはずだし、 その二つを組み合わせたら駄目という暗黙ルールなんですかね。 >>129 2個目〜5個目を選択するとして 2個目を選択した状態で5個目をShift+クリックじゃダメなん? Edge、FirefoxなどWebブラウザのJavascriptが新元号の令和に対応してない。 なぜかIE11は令和に対応済み。 >>130 もちろんその操作は理解していますが、回避方法の質問ではなく、 ユーザーが範囲選択しただけで処理が極端に重くなるというのが疑問でした。 処理が遅くならないようにするためのLVS_OWNERDATAだと思ってたので。 LVN_GETDISPINFOの処理にミスはないの? LVS_OWNERDATAとLVS_EX_FULLROWSELECTどっちも使わないときの 処理速度も遅いんなら仕様だと思うけどね >>133 以下のような、連番を表示するだけの簡単なテストでも発生します。 MFCのコードだけど、結局はAPIなので原理は同じはず。 IDC_LIST1もIDC_LIST2も、ダイアログエディタ上で置いたリストコントロールで、 リスト関連のスタイルはLVS_OWNERDATAを付けただけ。 IDC_LIST1のほうはマウスで選択範囲を広げていくとどんどん遅くなります。 LVS_EX_FULLROWSELECTを付けたIDC_LIST2のほうは全く遅くなりません。 m_list1.SetExtendedStyle(m_list1.GetExtendedStyle() | LVS_EX_DOUBLEBUFFER); m_list1.InsertColumn(0, _T("カラム"), LVCFMT_LEFT, 100); m_list1.SetItemCountEx(10000); m_list2.SetExtendedStyle(m_list2.GetExtendedStyle() | LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT); m_list2.InsertColumn(0, _T("カラム"), LVCFMT_LEFT, 100); m_list2.SetItemCountEx(10000); LVN_GETDISPINFOハンドラ { NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR); LVITEM* pItem = &pDispInfo->item; if (pItem->mask & LVIF_TEXT) { CString strItem; strItem.Format(_T("%d"), pItem->iItem); _tcsncpy_s(pItem->pszText, pItem->cchTextMax, strItem, _TRUNCATE); } *pResult = 0; } デスクトップで右クリメニューの「ディスプレイ設定」→ ディスプレイ詳細設定→ ディスプレイ1のアダプターのプロパティを表示します→ 専用ビデオメモリ: 128MB ↑この値を取得したいんですけど方法分る人居ますか? Win32APIで無理なら他の方法でもいいので。 誰も消防車を呼んでいない精神に基づいてフィードバックしといたよ コモンコントロールは作りもAPIも割といい加減だよ 不具合の原因がコレだったみたいなの多すぎ >>139 LVM_GETITEMCOUNT を直で使うしかなさそうだな ラッパー関数がある場合はSendMessageは使うなというくせに無茶ぬかす連中だ ドキュメントが間違っているだけ。 マクロはintを返すように正しく定義されている。 === CommCtrl.h === #define LVM_GETITEMCOUNT (LVM_FIRST + 4) #define ListView_GetItemCount(hwnd) (int)SNDMSG((hwnd), LVM_GETITEMCOUNT, 0, 0L) >>139 > マクロ関数だと全て無条件で戻り値voidになってるっぽいな 何かで自動生成してるんじゃね IDEなら>>145 の様に内容確認するのも容易だからたいした問題じゃないわな まあMSしっかりしろよとは思うが >ラッパー関数がある場合はSendMessageは使うなというくせに 言ってることとやってる事が違うっていう意味かと >>144 アスペか >>147 ??? だからドキュメントのシグネチャが間違ってるだけで「マクロの方を使えと」いう方針とやってることが違うというわけじゃねえだろ 「LVM_GETITEMCOUNTを使うしかない」とか言ってる時点で実際の定義もそうなってると勘違いしてるからなw ちなみにmsdnのドキュメントは合ってる(https://msdn.microsoft.com/en-us/windows/desktop/bb774957 ) MSも雑だしアプリ開発者の方も雑だなってだけの話 SendMessage()でもマクロでもメンバ関数でもどれでもいいけど、「GETITEMCOUNT」で大小文字区別なしでキーワード検索できるようにしておくことが重要でしょ。 各開発環境に付属するメソッド参照だけだと追跡しきれないので結局、原始的なキーワード検索になる。 >>147 > 直で使うしかなさそう > ラッパー関数 何を言ってるんだ 教祖様に批判的な意見には無差別な敵意にかられる信者がここにはいるようだね >>153 ListView_GetItemCountの返却値がvoidというmsdnの公式発表を批判しているのだが 何がどう的外れとおまえさんはぬかすんだ? typoなら訂正すべきところ、それすら行われていないんだが おまえさんとこの自転車操業を自転車操業だから大目に見ろという論法を一般化しようってか? 横からだけど… > 何がどう的外れとおまえさんはぬかすんだ? >>143 > LVM_GETITEMCOUNT を直で使うしかなさそうだな >>155 それがどう的外れなんだ? msしっかりしろと、あんたが言ったんだが >>154 だから引用してるやん > LVM_GETITEMCOUNT を直で使うしかなさそうだな > ラッパー関数がある場合はSendMessageは使うなというくせに ListView_GetItemCountを使ってもSendMessageにLVM_GETITEMCOUNTを指定しても 全く同じって事が理解できていないから>>143 みたいな発言になるんだろ >>156 ドキュメントの話と実際の実装の話の区別もついてないから指摘されてる >>148 がはっきり書いてるだろ 皮肉だと言い訳するならそれでもいいけどw LVM系ってSendMessageで構造体のポインタ渡すマンだから 外部プロセスから弄ろうとすると面倒すぎる >>154 MSのいつもの言い訳「仕様です」 つまりvoidのtypoは仕様だ >>158 >>143 を擁護するつもりは無いが >ListView_GetItemCountを使ってもSendMessageにLVM_GETITEMCOUNT 同じ機能だということも承知の上で 「LVM_GETITEMCOUNT を直で使うしかなさそうだな」→オレオレ関数を造りたいのにオレには造らせない 「ラッパー関数がある場合はSendMessageは使うなというくせに」→MS自身はSNDMSGを使ってる 論点が違うんだよ MS自身が用意した(SendMessageを使った)ラッパー関数を使えという主張に納得するかしないかの問題 >>143 は MS無視して(SendMessageを使った)ラッパー関数を自分で造ったら使ってもいいだろってことで 「ラッパー関数がある場合はSendMessageは使うな」に意味が無いと言いたいんだろ 漏れはエントロピー増やすのは反対 >>163 >>143 じゃないならそのエスパーもややこしくしてるだけやん? 論点もそっちがズレてるような というか「MS自身が用意した(SendMessageを使った)ラッパー関数」とか言ってるし 他人のふりした>>143 か、>>147 もそうだったのか、とすら思える どっちが>>143 の意図だったにせよ的外れなのには変わりないけどな どっちでもいいな voidじゃないのにvoidと書かれてるのが問題なんだから >>164 が >>143 である可能性も否定できない 自分で自分を否定するのか そして>>166 が>>143 である可能性も でいいのかな すごいレスが伸びてると思ったら・・・・ 人と人をいがみ合わせるMSが巨悪だということで手打ちにしたらいかがだろうか ドキュメントが間違ってたぐらいで鬼の首取ったようにギャアギャア騒ぐことが許されるのは初心者のうちだけでしょ。 >>158 何だおまえさん、MSKKの社員がここでどうたらぬかしてるとでもぬかすのか? だったら、それを公式見解と断る必要があるんだが 初心者質問です。 VBAからIEで印刷するときにプリンター選択を自由に行いたいです。 プリンタを選択する部分は、syslistview32というクラス名で、hwndまでわかっています。 sendmessageの、LVM_GETITEMCOUNTで、プリンターの数まで取得できることを確認しました。 今は、LVM_SETITEMSTATEで、構造体とテキトーなindexをsetして、sendmessageをしたら、IEが落ちてしまうような状態です。 メモリー書き込みも考慮しなければいけないなど情報も見かけましたが、VBA半年程度しかやっていないので、OSに近い処理は何から調べたらいいのかわかりません プリンター名が指定の文字列に該当するもののindexをsyslistview32から取得し、syslistview32の選択をそのindexにするような、VBAのコードをお教えいただくことはできないでしょう。(Cなどでも大丈夫です。) 以上、よろしくお願いします。 LVM_GETITEMCOUNT を NG にした 残念だったな LVM_GETITEMCOUNTって書いとけばキチガイ一人避けれるということでしょ >>176 デフォルトのプリンタを取得して保存しとく デフォルトのプリンタ変更する IEで印刷開始 デフォルトのプリンタもとに戻す こんなんじゃだめなのか? LVM_GETITEMCOUNT スレッドまたぎはNG >>180 ありがとうございます 今はそれで運用しているのですが、デフォルトプリンターを変更しても、IEで現在立ち上げているページのプリンターの選択は変わりませんでした。(新しいタブやページなどは変わる) ですので、デフォルトプリンターを変更した後タブを複製して、そのタブをアクティブにして、複製されていないhtmlの箇所をコピーして、印刷して、タブを閉じて、デフォルトプリンターを元に戻すような処理にしています。 プリンターを変更しないといけない処理が過去にあったりしたそうなので、その場でプリンター選択を操作できるのであれば、知りたいという感じです LVM_SETITEMSTATEで落ちるのはオレオレ構造体のミスとかじゃないの 別プロセスからメッセージ投げるから、IEが構造体にアクセスできないってことでしょ? VirtualAllocExでメモリ確保してそこに構造体用意しては LVM_GETITEMCOUNT >>175 じゃあ何のために158みたいな戯れ言をぬかしたんだ? アホだからか? それともバカだからか? >>185 なんで>>158 から社員が出てくるんだよ 理解できていないのは>>143 って事だぞ 全く同じって事が(>>143 には)理解できていないから>>143 みたいな発言になるんだろ って事だぞ 意味が分からん。 ドキュメントが間違ってるだけで、マクロ関数はintで実装されてるから気にせず使えって話で合ってる? >>184 ありがとうございます。少し調べてやってみます。 WiteProcessMemoryの返り値が0になる(´・ω・`) GetSharedMemの返り値 のアドレスが、「-1597046784」 とか返ってくる(´・ω・`) Long型(-200万〜200万くらい)なのに(´・ω・`) 助けてください(´・ω・`) tid = GetWindowThreadProcessId(lngSysListView32, pid) hProc = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, _ False, pid) lpShared1 = GetSharedMem(hProc, LenB(li)) lpShared2 = GetSharedMem(hProc, LenB(lt)) For i = 0 To maxitem - 1 li.mask = LVIF_TEXT li.iItem = i li.iSubItem = 0 li.lpszText = lpShared2 li.cchTextMax = LenB(lt) lngRC = WriteProcessMemory(hProc, ByVal lpShared1, li, LenB(li), lWritten) lngRC = WriteProcessMemory(hProc, ByVal lpShared2, lt, LenB(lt), lWritten) Public Function GetSharedMem(ByRef hProc As Long, ByVal memSize As Long) As Long GetSharedMem = VirtualAllocEx(ByVal hProc, ByVal 0&, ByVal memSize, MEM_RESERVE Or MEM_COMMIT, PAGE_READWRITE) End Function 176だよな・・・ GetSharedMemなんてAPIあったっけ?と思ったら、MSDNのサンプルまんま使ってるのかな? lpShared2とかltとか変数の意味が分からん この辺参考にして作り直したら ttp://hongliang.seesaa.net/article/7851680.html -1597046784==0xa0cf0000、別におかしくはなさそうな >Long型(-200万〜200万くらい)なのに(´・ω・`) VBA(VBS?)のLongって22bitなの? 10bit勘違いしてるだけでは? ソフト業界でマイクロソフトは邪魔でしかない。 まともなものをよくするならいいが、悪するのがマイクロソフトで しかも、おかしなものを直さず放置して悪化させる。 マイクロソフトは邪魔な存在でしかない。 マイクロソフトの弱点は仕様通りに作れないのは欠点は 同時に自社のソフトをWindows以外のデバイスへ移植できないことも意味する。 そこ弱点だし、将来性がないのもそのあたり。 Windowsの次のOSの仕組みを作ってもソフトの移植ができない。 来年か再来年あたりに出すわけだが引き継ぎできないだろうね。 昔にアーケードゲームの中途半端な移植のファミコンソフトレベルでしかない。 作っても何か違うって状態になる。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる