X



Win32API質問箱 Build125
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2019/02/27(水) 15:09:08.64ID:6ExXwgQU
Win32APIについての質問はこちらへどうぞ。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
 英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

■過去スレ
Win32API質問箱 Build124
http://mevius.5ch.net/test/read.cgi/tech/1510395780/
Win32API質問箱 Build123
http://mevius.2ch.net/test/read.cgi/tech/1475897582/
Win32API質問箱 Build122
http://echo.2ch.net/test/read.cgi/tech/1451988219/
Win32API質問箱 Build121
http://echo.2ch.net/test/read.cgi/tech/1438695290/
Win32API質問箱 Build120
http://echo.2ch.net/test/read.cgi/tech/1428570962/

■関連スレ
Visual Studio 2019
http://mevius.5ch.net/test/read.cgi/tech/1548765663/
Visual Studio 2017 Part6
http://mevius.5ch.net/test/read.cgi/tech/1528645068/
【C++】 DirectX初心者質問スレ Part41 【C】
http://mevius.5ch.net/test/read.cgi/tech/1521786252/
001513
垢版 |
2019/03/21(木) 22:22:51.42ID:nFWHFdE/
>>14
確かにその方法で、メモ帳やサクラエディタにはでドロップできるのですが、Visual Studio 2017やMozilla Firefoxにはドロップできないようです。
トップウィンドウのウィンドウハンドルを指定しているのですが、WM_DROPFILEを送るウィンドウハンドルの問題なのか、それとも違う要因なのか。
0016さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/03/21(木) 22:28:46.83ID:FlExFmKW
>>15
WS_EX_ACCEPTFILES拡張スタイルをチェックしながら、WindowFromPoint、GetParent、EnumChildWindowsなどでたどっていく。
ウィンドウの構造は、Spy++で分かるはず。
001713
垢版 |
2019/03/21(木) 22:35:43.09ID:nFWHFdE/
>>16
何をたどるのですか?

もう少し汎用的な例に変えます。
エクスプローラーで開かれたフォルダにファイルをドロップするにはどうすればいいでしょうか。
Windows10で試しているのですが、どなたかドロップ出来た方いらっしゃいますか?
0018さまよえる蟻人間 ◆T6xkBnTXz7B0
垢版 |
2019/03/21(木) 22:46:53.71ID:FlExFmKW
たどるは、ウィンドウハンドル。ハンドルなくば話にならぬ。
FindWindow, FindWindowEx、EnumWindowsでまずはターゲットのウィンドウハンドルを取得する。
001913
垢版 |
2019/03/21(木) 22:56:31.56ID:nFWHFdE/
>>18
たびたび回答していただくのは有難いのですが、失礼ながら徒労に思えます。
フォルダへのファイルドロップの成功事例はご存知でしょうか?
002113
垢版 |
2019/03/21(木) 23:28:19.79ID:nFWHFdE/
ちなみに徒労について書いておくと、
Visual Studio 2017とexplorer.exe をSpy++で調べたところ、WS_EX_ACCEPTFILESを持つウィンドウはひとつもなし。
002313
垢版 |
2019/03/21(木) 23:38:34.07ID:nFWHFdE/
>>22
マウスエミュレートなしでどうかひとつ m(_ _)m
0025デフォルトの名無しさん
垢版 |
2019/03/22(金) 01:29:49.59ID:lgvalJzA
そういうのはソフトによってできるできないどうしてもあるよ
ひとことでD&Dいっても実装方法色々あるからね
汎用的なの考えずにターゲット絞れ
0027デフォルトの名無しさん
垢版 |
2019/03/27(水) 07:52:17.79ID:DfX99uD1
>>26
呼び出し側がコードページを変えるなどしようとも、実行される側のプログラムは引数を規定コードページで受け取るので無意味。
0030デフォルトの名無しさん
垢版 |
2019/03/27(水) 14:13:27.93ID:eZgXpjKy
>>28
あほやん
0031デフォルトの名無しさん
垢版 |
2019/03/27(水) 17:21:20.72ID:sZeYmZ5f
>>27
cp932が返ってきました

>>28
調べてみます(_ _)

>>29
パイプして出力を読んでそれをcp932からutf8に変換するということですよね
0033デフォルトの名無しさん
垢版 |
2019/03/27(水) 19:36:43.58ID:TFRkKwyv
>>26
何をUTF-8にしたいの?
CreateProcessに関連する文字列は
(1) 実行ファイルのPath
(2) コマンドラインパラメータ
(3) 環境変数
(4) カレントディレクトリ

(1)(3)(4)はCreateProcessA/CreatePeocessWでMBCSかUNICODEで渡す
必要があり、UTF-8では渡せない。(UTF8をUNICODEに変換して渡す)

(2)は受け取る側(実行されるアプリ側)しだいだねえ。
0035デフォルトの名無しさん
垢版 |
2019/03/28(木) 01:15:19.97ID:IvEebbBd
utf-8はmbcsやろ
0037デフォルトの名無しさん
垢版 |
2019/03/28(木) 01:21:36.74ID:I1dquAY4
>>33
CreateProcessにPythonとスクリプトを渡して実行、その出力をUTF-8で得たいんですが
例えば

python hoge.py

というコマンドラインを実行させるということなんですが
hoge.pyの出力はUTF-8になっているんですがCreateProcessを通すと出力がcp932になってしまうんです
003927
垢版 |
2019/03/28(木) 02:00:16.16ID:AOcR4eqo
つ ReadConsoleW()
004037
垢版 |
2019/03/28(木) 03:39:05.22ID:I1dquAY4
すみません、Pythonのスクリプトに

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

を追加したら期待する出力を得られました
Win32API 関連の問題ではなかったみたいです
sys.stdout.encoding が cp932 になっていたのが原因だったみたいです
Windows環境のPythonだと標準で cp932 になるんですね

>>38-39
無事解決できました
ありがとうございました
0041デフォルトの名無しさん
垢版 |
2019/03/28(木) 04:11:23.81ID:Wtvk2F5L
漏れは、Ruby から、Powershell のGet-Clipboard, Set-Clipboard や、
clip コマンドを呼び出して、処理する

Ruby内では、UTF-8 で処理するから、
CP932から、UTF-8へ変換して処理して、
UTF-8から、CP932へ戻す

入力 : Windows(CP932) → 処理 : Ruby(UTF-8) → 出力 : Windows(CP932)

# クリップボード内の複数行文字列の、各行の先頭・末尾から、
# 連続する空白類を除去して、クリップボードに入れる

str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換

ary = str.each_line.map( &:strip ) # 連続する空白類を除去する

IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end
0044デフォルトの名無しさん
垢版 |
2019/03/28(木) 20:41:44.79ID:1BkYlymu
未だ、Win32apiって使われてるんだな。
自分はこの前古いwince向けソフトの機能追加のために
久しぶりに使った。
ce向けは仕様が若干簡素化されてたりしても少しはまった。後、開発環境(evc++)の軽さにも驚いた
0046デフォルトの名無しさん
垢版 |
2019/03/28(木) 21:25:20.80ID:1BkYlymu
表現が不適切だった。
現在のアプリ開発は.netが主体なので、c言語でwinアプリを書く機会って減ってるのかなと思って。
※.netだと便利なライブラリが準備されてるので、そもそも
win32api を使う機会も減るのかと
0047デフォルトの名無しさん
垢版 |
2019/03/28(木) 22:17:42.48ID:iCjWPJaI
>>46
便利なのとなんでも出来るかって云うのはイコールではないからね
手段は多く持っていたほうが良い
0049デフォルトの名無しさん
垢版 |
2019/03/29(金) 05:10:05.40ID:NCHlEZ3/
.NETは糞
0051デフォルトの名無しさん
垢版 |
2019/03/29(金) 06:02:19.13ID:Eeymx9+7
Win32APIのラッパーはMFCと言うイメージ。
.netは.netと言うVMのAPIかな。
元がDelphiのVCLだからラッパーと言うのもおこがましい、高度に抽象化されたライブラリだし。
0052デフォルトの名無しさん
垢版 |
2019/03/29(金) 06:38:45.99ID:ynnAtX2U
.NETは型システムを含めたランタイムそのものを内包しているので単なるライブラリではないだろ
0053デフォルトの名無しさん
垢版 |
2019/03/29(金) 17:48:35.77ID:4iWq2eRj
極論かもしれないけど.netは単体のアプリケーションでMSの提供する
APIでWindowsの画面表示を書き換えるための環境なんだよね

なんでロジックと画面の書き換え以外の低レベルアクセスとかしようと
するとどうしてもWin32APIが必須になるのでいまだに「DllImport」みたいな
APIを残しておかないといかないわけで

低レベルはC++で書いてライブラリ化すればってのが本道なんだろうけど
結局「DllImport」するだけなんで、だったら直接Win32API呼んだほうが
早いし簡単だしってことでWin32APIから離れられないってことで

JavaもそうだけどマルチプラットフォームのためのVMで動作する言語は
低レベルアクセスを実装しちゃうとプラットフォームの違いを吸収できない
のでライブラリ参照みたいな仕組みで実装するしかないんだけどね
0054デフォルトの名無しさん
垢版 |
2019/03/29(金) 22:57:10.75ID:tI8PdZN8
44だけど、.netやjavaのようなvmが昔から普及してたらと思うよ。昨年からwinceからlinuxへのアプリ移植行ったけど、できるだけ元コードに手をいれたくなかったので、win32apiやmfcと同じ動きをする関数を作って対応した。
今はlinuxで.netも動くようなので、c#で書いてたらこんな開発しなくても済んだのにと思ったりする。
当時のCPUではvmアプリはまともに動かなかったかもしれないけど。
0055デフォルトの名無しさん
垢版 |
2019/03/30(土) 13:47:21.12ID:SC/1hzmw
今だって、例えばJavaならJNIゴリゴリだったりして
本気で使うアプリの移植性がいいとは思えないがなあ
安い値段で拾ってこれるプログラマが触る部分にはちょうど良いのだろうが
0056デフォルトの名無しさん
垢版 |
2019/03/30(土) 14:03:53.87ID:fcBwHp1J
移植前のの開発者や仕様決める奴の能力次第だな
後々のこと考えてた奴のを移植するのは言語関係なく移植楽
0057デフォルトの名無しさん
垢版 |
2019/03/30(土) 21:16:53.64ID:JW4B6YKp
>>56
その通りだと思う。
ただ、vm上で動くアプリはプラットフォーム依存部をvmが吸収してくれるので、そこの部分の移植は不要。
0058デフォルトの名無しさん
垢版 |
2019/03/30(土) 23:53:26.23ID:tgzhrogL
vine息してるの?
0059デフォルトの名無しさん
垢版 |
2019/03/30(土) 23:55:03.97ID:tgzhrogL
うっかりさんした
wineって息してるの?
0061デフォルトの名無しさん
垢版 |
2019/04/01(月) 03:53:34.68ID:OA8CryLM
今回残念なのはシステム改修の需要は増えたけど
その場しのぎのパッチみたいな作業だけが増えたこと
どこも次の次の元号やその先の元号変更時に
「今回みたいに一ヶ月も期間置かなくても即日変更可能なシステムにしておこう」
って方向で改修する流れにならなかった
これはせっかくの天皇陛下の御英断と改元リハーサルにも関わらず
将来に禍根を遺す結果となってしまった
0062デフォルトの名無しさん
垢版 |
2019/04/01(月) 17:58:58.51ID:NMCWmssp
ウインドウを閉じさせるのは簡単だけど
例えばWin10の「YourPhone.exe」など、プロセスがキモいから終了させたいという場合
スナップショットでプロセスIDまでは掴んでいるのだけど
そこからプロセスを終了させるには、子プロセスを調べたりして面倒そうですか?
0063デフォルトの名無しさん
垢版 |
2019/04/01(月) 18:02:31.23ID:54BjtqNy
>天皇陛下の御英断
ちょーキモい野郎だ
あんな寄生虫は即刻処刑すべきだ
特別会計や本来不要な「国債」でどんだけ搾取されてると思ってるんだ
0065デフォルトの名無しさん
垢版 |
2019/04/01(月) 18:11:52.31ID:Pri2Y0H6
>>62
使わないんだったら最初から起動しなければいい
0066デフォルトの名無しさん
垢版 |
2019/04/01(月) 19:14:41.26ID:54BjtqNy
>在日特権で寄生してるどっかの民族にそれ言えよ
天皇が同和朝鮮人に治外法権を与えるから
同和朝鮮人は女の子を強姦して臓器を抜き出して病院から2千万円ゲットだ
警察に捕まっても天皇同和だと言えば解放される
問題は朝鮮人天皇にあると思いませんか?
0070デフォルトの名無しさん
垢版 |
2019/04/24(水) 11:50:56.31ID:hh9F/mKg
OSの日付表示を元号表示にしてない非国民なんているの?
0071デフォルトの名無しさん
垢版 |
2019/04/24(水) 13:27:16.17ID:drQF/d6o
天皇制いらね。
即位したから10連休?恩赦?
バカじゃねーの
どこの後進国だよw
0072デフォルトの名無しさん
垢版 |
2019/04/24(水) 13:40:25.86ID:KVKHKBwP
8964
上級国民の公務員様が休みたいだけ
0073デフォルトの名無しさん
垢版 |
2019/04/24(水) 19:08:02.96ID:r7nTGT0x
ぼくも明日から5/6まで休みますが上級国民にカテゴライズして貰えるのですかね?(純真)
0075デフォルトの名無しさん
垢版 |
2019/04/25(木) 11:12:33.92ID:OZvMAFB5
業務でエクスプローラでファイルリストを見る時は、曜日も表示できるようにすると便利だということに最近になって気づいた。
頭を慣らすために西暦ではなく元号の年月日時表示形式にするのは、プロとしての心得でしょ。
0076デフォルトの名無しさん
垢版 |
2019/04/25(木) 11:39:57.10ID:TNMeUiOs
頭を慣らすために曜日非表示は最低限だろ。日付非表示までいけよ。プロとしての心構えが足りないぞ
0077デフォルトの名無しさん
垢版 |
2019/04/25(木) 12:34:20.52ID:OZvMAFB5
元号&曜日つきの日付設定の件は、ファイルブラウザ限定の話ではない。メールブラウザとかも。
0081デフォルトの名無しさん
垢版 |
2019/04/25(木) 20:27:13.71ID:OZvMAFB5
メーラーのThunderbirdだと、OSで元号表示にしたら「西暦2019年4月25日(木) 12:14」のように表示され、
元号表示ってそういう意味じゃないだろ、と静かなツッコミを楽しむことができるぞ。
0082デフォルトの名無しさん
垢版 |
2019/04/25(木) 21:01:32.97ID:jFTtrwgp
>>81
日本では「AD」を「西暦」と呼んでいるから違和感があるだけ。「AD」は「アンノドミニ」という名の元号。
0083デフォルトの名無しさん
垢版 |
2019/04/25(木) 21:22:22.93ID:OZvMAFB5
EnumDateFormatsExEx() で取得できる書式を使っても、GetDateFormatEx()では「西暦」を含む文字列は出力されない。
となるとMozilla Thunderbirdは書式に含まれるggを独自に「西暦」という文字列に置換していると予想できる。
0084デフォルトの名無しさん
垢版 |
2019/04/25(木) 22:18:02.14ID:jqthfa4A
>>83
紀元前を意識してるんだっけ?

Windowsがそんな昔を想定して作られているとは思えぬ。
0089デフォルトの名無しさん
垢版 |
2019/04/26(金) 14:04:32.85ID:LLMkwGoL
>>86
西暦はそういう年号なんだよ。まともに調べてものを言えよ!
0091デフォルトの名無しさん
垢版 |
2019/04/26(金) 15:04:24.87ID:7UckC18L
ほんとアホばっかw
西暦xxxx年って書き方は普通だよ

平成は元号であり年号でもある
西暦は年号だけど元号ではない
>>81は「年号表示」という訳にしとくのがいい
0092デフォルトの名無しさん
垢版 |
2019/04/26(金) 19:32:27.95ID:RL3aG5HG
60 名前:名無しさん@1周年[sage] 投稿日:2019/04/26(金) 17:07:27.22 ID:ZP74hWkE0
access2016は対応済みだな、表示をgee/mm/ddにしてH31/05/01と入力するとR01/05/01と変換してくれる。
ちなみに2007だとR01/05/01と入力するとご丁寧にもH31/05/01と変換してくれるw
そこまでやるならきちんと対応しろと言いたい。
0093デフォルトの名無しさん
垢版 |
2019/04/26(金) 19:46:10.67ID:wYSD0glh
大規模開発の時に役立つ

・モジュール間の結合を下げて、作業分担・デバック・例外処理の範囲を明確化できる
・継承の型指定で、質がピンキリなプログラマーたちの実装を縛れる
・オブジェクト指向の思想は直感的でわかりやすいから、頭の弱いPGにも理解させやすい

特にプログラマーの質が低い時は、javaを使わないと大規模開発できない
0094デフォルトの名無しさん
垢版 |
2019/04/26(金) 19:46:49.95ID:pk1a8vBU
>>92
まだ改元された訳じゃないからそれで正しい

5/1 以降は動作が変わるはず
0096デフォルトの名無しさん
垢版 |
2019/04/26(金) 20:07:40.50ID:QuMKW8xW
S64年からH1年 と書くようになった時、たぶんあまり違和感を感じなかったと思うが
R1年ってなんか妙だな

R1とか書かれたら国一と勘違いしそう
0098デフォルトの名無しさん
垢版 |
2019/04/26(金) 21:06:12.68ID:rqrZnamv
自作アプリで、他アプリがアクティブなときでもマウスイベントを監視するために、
SetWindowsHookEx(WH_MOUSE_LL, HookProc, hmod, 0);
とすると、確かにHookProcが呼ばれますが、
アクティブな他アプリが管理者特権あり(タスクマネージャとか)だと呼ばれません。

その場合でも、自作アプリが管理者特権ありで実行されていれば、
ちゃんとHookProcが呼ばれます。

自作アプリを管理者特権なしの通常の実行時でも、
タスクマネージャとかがアクティブなときのマウスイベントを監視するには
どうすればいいのでしょうか?

フリーソフトのX-Mouse Button Controlとか、StrokesPlusとか、
ではできているようなので、なにかしら方法はあると思うのですが。

(win10, 64bit)
0099デフォルトの名無しさん
垢版 |
2019/04/26(金) 23:16:56.39ID:vOVYhDJF
自分より上位の権限で動作してるプログラムの動作を盗めちゃったら
特権の意味がないじゃん
0102デフォルトの名無しさん
垢版 |
2019/04/27(土) 18:26:23.20ID:6JD570yx
こっそり悪いことをしたいのに、それでは困るんです!!
詳しい人だけレスしてください!!
010398
垢版 |
2019/04/27(土) 19:02:31.25ID:FkFh7/lX
マウスジェスチャツールの類って、
管理者権限アプリがアクティブな時は動作しません、
ってわけにはいかず、
実際、例示したソフトは管理者権限なくても
ちゃんと動作してて、これって一体どうやって実現してるんだろう?
という純粋な興味と、
できれば管理者権限はあまり濫用したくないのと。
0104デフォルトの名無しさん
垢版 |
2019/04/27(土) 19:08:42.81ID:yvp3RQsi
たとえばUACの画面でも動いてるってことは管理者特権で動いてるってことだよ
0106デフォルトの名無しさん
垢版 |
2019/04/28(日) 16:27:22.99ID:iQtWq0Ma
>>103
すでに試しているかもしれないけど、同じようにキーフックとマウスフックする
プログラムで試したら、同じようにタスクマネージャがアクティブウィンドウに
なっていると反応しなくなったので、アプリ自体を管理者権限で起動したら
動作するようになったよ

なので、手作業で管理者権限で実行しなくてもうまく動作するアプリは内部で
権限の取得を行っているんだと思うけど

試していないので分からないけど「"windows10" "管理者権限" 取得 api」
あたりでぐぐるとヒントあるかも
0107デフォルトの名無しさん
垢版 |
2019/05/02(木) 19:34:03.04ID:vshP5qNq
エディタボックスの EM_GETFILELINE について教えろ下さい。
0108デフォルトの名無しさん
垢版 |
2019/05/02(木) 22:27:42.89ID:XhxUsVCI
指定したファイル(または論理)行のテキストを取得します(テキストの折り返し区切り文字は無視されます)。このマクロを使用するか、EM_GETFILELINEメッセージを明示的に送信することができます。
0109デフォルトの名無しさん
垢版 |
2019/05/04(土) 14:13:39.47ID:mtwbaS1U
改元を契機に、OSの日付表示を「和暦」にすることをお勧めしたい。
エクスプローラで日付に曜日をつけられるのは「和暦」だけ。
ファイル一覧の更新日時に曜日が表示されていると便利だよ。
0110デフォルトの名無しさん
垢版 |
2019/05/04(土) 21:51:14.91ID:a8KzjyU7
パソコン初心者スレで言ってろよw
曜日が欲しいのにないなら自分で表示すればいいだろ
0111デフォルトの名無しさん
垢版 |
2019/05/04(土) 22:24:07.50ID:mtwbaS1U
そもそも日付設定を西暦にすると短い書式で曜日表示できないWindows10の仕様は不便だと思うけど、どうよ?
0113デフォルトの名無しさん
垢版 |
2019/05/05(日) 00:10:59.90ID:QZI32h5J
>>111
設定→時刻と言語→地域→日付、時刻、地域の追加設定→日付、時刻、または数値の形式の変更→追加の設定→日付タブ→短い形式をyyyy/MM/dd '('ddd')'にする
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況