1 名前:デフォルトの名無しさん [2019/02/27(水) 15:09:08.64 ID:6ExXwgQU.net] Win32APIについての質問はこちらへどうぞ。 ■注意 ・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。 ・日本語版MSDN Online Libraryは不完全です。 英語版( msdn.microsoft.com/en-us/library/ )の利用推奨。 ・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。 ・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで ■過去スレ Win32API質問箱 Build124 mevius.5ch.net/test/read.cgi/tech/1510395780/ Win32API質問箱 Build123 mevius.2ch.net/test/read.cgi/tech/1475897582/ Win32API質問箱 Build122 echo.2ch.net/test/read.cgi/tech/1451988219/ Win32API質問箱 Build121 echo.2ch.net/test/read.cgi/tech/1438695290/ Win32API質問箱 Build120 echo.2ch.net/test/read.cgi/tech/1428570962/ ■関連スレ Visual Studio 2019 mevius.5ch.net/test/read.cgi/tech/1548765663/ Visual Studio 2017 Part6 mevius.5ch.net/test/read.cgi/tech/1528645068/ 【C++】 DirectX初心者質問スレ Part41 【C】 mevius.5ch.net/test/read.cgi/tech/1521786252/
175 名前:デフォルトの名無しさん mailto:sage [2019/06/10(月) 22:22:35.68 ID:aj7K9vQb.net] >>158 何だおまえさん、MSKKの社員がここでどうたらぬかしてるとでもぬかすのか? だったら、それを公式見解と断る必要があるんだが
176 名前:デフォルトの名無しさん mailto:sage [2019/06/10(月) 22:23:29.07 ID:aj7K9vQb.net] >>162 ほんこれ
177 名前:デフォルトの名無しさん mailto:sage [2019/06/10(月) 22:29:27.87 ID:TC6Uh5Cw.net] またエントロピーが増えてきたw
178 名前:デフォルトの名無しさん mailto:sage [2019/06/11(火) 09:28:10.66 ID:oRHFwQ78.net] >>172 誰もそんな事言ってないけど?
179 名前:デフォルトの名無しさん mailto:sage [2019/06/11(火) 14:20:31.55 ID:lbh69FdF.net] 初心者質問です。 VBAからIEで印刷するときにプリンター選択を自由に行いたいです。 プリンタを選択する部分は、syslistview32というクラス名で、hwndまでわかっています。 sendmessageの、LVM_GETITEMCOUNTで、プリンターの数まで取得できることを確認しました。 今は、LVM_SETITEMSTATEで、構造体とテキトーなindexをsetして、sendmessageをしたら、IEが落ちてしまうような状態です。 メモリー書き込みも考慮しなければいけないなど情報も見かけましたが、VBA半年程度しかやっていないので、OSに近い処理は何から調べたらいいのかわかりません プリンター名が指定の文字列に該当するもののindexをsyslistview32から取得し、syslistview32の選択をそのindexにするような、VBAのコードをお教えいただくことはできないでしょう。(Cなどでも大丈夫です。) 以上、よろしくお願いします。
180 名前:デフォルトの名無しさん mailto:sage [2019/06/11(火) 14:27:56.01 ID:Y18rXsQw.net] LVM_GETITEMCOUNT を NG にした 残念だったな
181 名前:デフォルトの名無しさん mailto:sage [2019/06/11(火) 15:50:09.81 ID:mh1wU8om.net] とばっちりカワイソス
182 名前:デフォルトの名無しさん mailto:sage [2019/06/11(火) 16:15:17.11 ID:DThKFJnr.net] LVM_GETITEMCOUNTって書いとけばキチガイ一人避けれるということでしょ
183 名前:デフォルトの名無しさん mailto:sage [2019/06/11(火) 16:18:02.74 ID:DThKFJnr.net] >>176 デフォルトのプリンタを取得して保存しとく デフォルトのプリンタ変更する IEで印刷開始 デフォルトのプリンタもとに戻す こんなんじゃだめなのか?
184 名前:デフォルトの名無しさん mailto:sage [2019/06/11(火) 16:34:17.98 ID:+sMFHfdj.net] LVM_GETITEMCOUNT スレッドまたぎはNG
185 名前:デフォルトの名無しさん mailto:sage [2019/06/11(火) 17:55:31.55 ID:b3tPk+od.net] >>180 ありがとうございます 今はそれで運用しているのですが、デフォルトプリンターを変更しても、IEで現在立ち上げているページのプリンターの選択は変わりませんでした。(新しいタブやページなどは変わる) ですので、デフォルトプリンターを変更した後タブを複製して、そのタブをアクティブにして、複製されていないhtmlの箇所をコピーして、印刷して、タブを閉じて、デフォルトプリンターを元に戻すような処理にしています。 プリンターを変更しないといけない処理が過去にあったりしたそうなので、その場でプリンター選択を操作できるのであれば、知りたいという感じです
186 名前:デフォルトの名無しさん mailto:sage [2019/06/11(火) 18:15:49.68 ID:1BO360IJ.net] LVM_SETITEMSTATEで落ちるのはオレオレ構造体のミスとかじゃないの
187 名前:デフォルトの名無しさん mailto:sage [2019/06/11(火) 19:34:28.79 ID:iv+iCaIJ.net] 別プロセスからメッセージ投げるから、IEが構造体にアクセスできないってことでしょ? VirtualAllocExでメモリ確保してそこに構造体用意しては LVM_GETITEMCOUNT
188 名前:デフォルトの名無しさん mailto:sage [2019/06/11(火) 20:56:45.31 ID:HsLA7EXf.net] >>175 じゃあ何のために158みたいな戯れ言をぬかしたんだ? アホだからか? それともバカだからか?
189 名前:デフォルトの名無しさん mailto:sage [2019/06/11(火) 21:07:50.93 ID:oRHFwQ78.net] >>185 なんで>>158 から社員が出てくるんだよ 理解できていないのは>>143 って事だぞ 全く同じって事が(>>143 には)理解できていないから>>143 みたいな発言になるんだろ って事だぞ
190 名前:デフォルトの名無しさん mailto:sage [2019/06/11(火) 22:59:27.04 ID:xU3mv9gp.net] 意味が分からん。 ドキュメントが間違ってるだけで、マクロ関数はintで実装されてるから気にせず使えって話で合ってる?
191 名前:デフォルトの名無しさん mailto:Sage [2019/06/11(火) 23:02:51.29 ID:VKkOh0JU.net] >>184 ありがとうございます。少し調べてやってみます。
192 名前:デフォルトの名無しさん mailto:sage [2019/06/14(金) 00:21:25.69 ID:TGTlo7vf.net] 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
193 名前:デフォルトの名無しさん mailto:sage [2019/06/14(金) 01:18:48.45 ID:udVNzUQx.net] 176だよな・・・ GetSharedMemなんてAPIあったっけ?と思ったら、MSDNのサンプルまんま使ってるのかな? lpShared2とかltとか変数の意味が分からん この辺参考にして作り直したら ttp://hongliang.seesaa.net/article/7851680.html
194 名前:デフォルトの名無しさん mailto:sage [2019/06/14(金) 02:03:09.01 ID:WbpzR08B.net] -1597046784==0xa0cf0000、別におかしくはなさそうな >Long型(-200万〜200万くらい)なのに(´・ω・`) VBA(VBS?)のLongって22bitなの? 10bit勘違いしてるだけでは?
195 名前:デフォルトの名無しさん mailto:sage [2019/06/14(金) 07:51:56.01 ID:AF2NDvCn.net] >>190 ありがとうございます 読んで理解して再度実装してみます 今回のコードはこれを丸コピして、プリンター選択画面に対して試してみているという感じです。(プリンター名一覧を取得できるかどうか) https://teratail.com/questions/120773 >>192 うわ、本当だ。知れて良かったです。ありがとうございます bit反転が起きていると思って、反転させてみたら(+2 ^32?)オーバーフローが起きて、勘違いしていました LVM_SETITEMSTATEはここを参考にして書いていました https://stackoverflow.com/questions/12342433/i-need-to-select-an-item-of-a-syslistview32-using-sendmessage-in-c-sharp?rq=1 https://oshiete.goo.ne.jp/qa/4705094.html 今調べたらこっちのはSolvedなので参考にしてみます https://social.msdn.microsoft.com/Forums/vstudio/en-US/f7788669-c3a9-4d80-b61b-8e26870c7cf4/select-listviewitem-using-lvmsetitemstatesolved?forum=vbgeneral いろいろと助かります
196 名前:デフォルトの名無しさん [2019/06/14(金) 12:34:20.64 ID:rNE5XrYC.net] 馬鹿には無理
197 名前:デフォルトの名無しさん [2019/06/14(金) 12:52:57.90 ID:bpAwmG5b.net] ソフト業界でマイクロソフトは邪魔でしかない。 まともなものをよくするならいいが、悪するのがマイクロソフトで しかも、おかしなものを直さず放置して悪化させる。 マイクロソフトは邪魔な存在でしかない。 マイクロソフトの弱点は仕様通りに作れないのは欠点は 同時に自社のソフトをWindows以外のデバイスへ移植できないことも意味する。 そこ弱点だし、将来性がないのもそのあたり。 Windowsの次のOSの仕組みを作ってもソフトの移植ができない。 来年か再来年あたりに出すわけだが引き継ぎできないだろうね。 昔にアーケードゲームの中途半端な移植のファミコンソフトレベルでしかない。 作っても何か違うって状態になる。
198 名前:デフォルトの名無しさん mailto:sage [2019/06/14(金) 13:22:29.13 ID:FKc1iwhz.net] >>194 突然どうした? この朝鮮臭い駄文は窓板きっての汚物キチガイマカーのコピペと見受けるが
199 名前:デフォルトの名無しさん mailto:sage [2019/06/14(金) 15:32:06.70 ID:vVm8Z7bX.net] >>194 内容はともかく、もうちょっと日本語を頑張れ。
200 名前:デフォルトの名無しさん mailto:sage [2019/06/14(金) 15:50:36.86 ID:sZCV0u2+.net] >>194 >マイクロソフトの弱点は仕様通りに作れないのは欠点は 同時に自社のソフトをWindows以外のデバイスへ移植できないことも意味する。 この文章は日本語としておかしい。 >昔にアーケードゲームの中途半端な移植のファミコンソフトレベルでしかない。 この文章も日本語としておかしい
201 名前: mailto:sage [2019/06/14(金) 18:48:04.20 ID:FySvhFYo.net] >>194 >悪するのが >マイクロソフトの弱点は仕様通りに作れないのは欠点は同時に自社のソフトをWindows以外のデバイスへ移植できないことも意味する。 >そこ弱点だし >そのあたり >昔に 以上、日本語としておかしい部分を抽出したので訂正するように
202 名前:デフォルトの名無しさん mailto:sage [2019/06/14(金) 21:10:26.30 ID:B8znrq/O.net] 日本語おかしい奴vsあたまおかしい奴
203 名前:デフォルトの名無しさん mailto:sage [2019/06/14(金) 21:14:02.15 ID:RsWDD4iG.net] エイリアン対アバター並の意欲作だな
204 名前:蟻人間 mailto:sage [2019/06/14(金) 21:14:45.86 ID:lQGpZUNA.net] あたまがぱっかーん
205 名前:デフォルトの名無しさん mailto:sage [2019/06/16(日) 04:09:22.45 ID:HeZkFDT3.net] 寄生獣だな
206 名前:デフォルトの名無しさん mailto:sage [2019/06/16(日) 15:19:28.33 ID:RxcvAD6u.net] ダメだぁ... WriteProcessMemory がどうしても失敗する(´・ω・`) デスクトップのsyslistview32やexplorerのDirectUIHWNDでは成功(返り値1)するんだけど、 メモ帳やIEのプリンター選択のsyslistview32や、メモ帳のEditに対しては失敗(返り値0)する なんでー?
207 名前:デフォルトの名無しさん mailto:sage [2019/06/16(日) 15:34:33.84 ID:RxcvAD6u.net] Err.LastDllError の番号は998で、 メモリ ロケーションへのアクセスが無効です。
208 名前:デフォルトの名無しさん [2019/06/16(日) 17:12:52.81 ID:Z9zSyDOE.net] WOW64
209 名前:デフォルトの名無しさん mailto:Sage [2019/06/16(日) 20:39:35.26 ID:RxcvAD6u.net] >>205 64bit版でコンパイルしたら、32bit版のプロセスに介入することできないから難しいという感じでしょうか(´;Д;`) 64bit版のIEでも返り値は0でした... Long型を、LongPtrにしてもダメでした...
210 名前:デフォルトの名無しさん mailto:sage [2019/06/17(月) 02:30:25.07 ID:q7RVlLCN.net] 32bit,x64の実行ファイル2つ作って用途に合わせて切り替えたら?
211 名前:デフォルトの名無しさん [2019/06/17(月) 11:24:55.79 ID:lxO8a0KV.net] いよいよwindowsを捨てる時が来たようだ
212 名前:デフォルトの名無しさん mailto:sage [2019/06/18(火) 04:17:01.07 ID:fify6tPn.net] また買えばいいよ
213 名前:デフォルトの名無しさん [2019/06/18(火) 06:23:28.70 ID:3nOE2mBA.net] プログラム板にキチガイ降臨中!botに一晩も反応する異常さ 一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。 https://mevius.5ch.net/test/read.cgi/tech/1559872586/ 142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO >>141 名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、 片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか? 一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。
214 名前:デフォルトの名無しさん [2019/06/18(火) 12:45:38.38 ID:1CtlGReK.net] 堂々の一位 hissi.org/read.php/tech/20190618/M25PRTJtQkE.html
215 名前:デフォルトの名無しさん mailto:sage [2019/06/22(土) 14:06:32.16 ID:DZJ/hc7X.net] >>206 自分は一旦それで絶望して 32bitアプリ用のラッパー作って呼んでる 32bit資産使ってる人はみんなこうじゃないかな
216 名前:デフォルトの名無しさん [2019/06/22(土) 14:29:13.02 ID:8YBlX71B.net] seamless ωωω
217 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 16:44:22.77 ID:hU5ITaEA.net] 既存の Console に代わる Windows Terminal のプレビュー版が公開されたけど 今後コンソールアプリはどういう作りになるんだろう 既存の ConsoleAPI またはその拡張API になるのか それともConsoleAPI は廃止されて Unix なんかと同様のエスケープシーケンスを制御する curses ライブラリみたいのが提供されるのか まぁオープンソースみたいだからソース見ればいいんだろうけど
218 名前:デフォルトの名無しさん [2019/06/25(火) 16:58:20.59 ID:vGWUuZ9A.net] 初歩的な質問ですが、64bitのプロセスにもWin32APIって使えますか?
219 名前:デフォルトの名無しさん mailto:sage [2019/06/25(火) 17:11:37.24 ID:JYAeHTmF.net] 使える ただし、例えばGetWindowLongのようにポインタのビット数を決め打ちしている箇所に注意が必要
220 名前:蟻人間 mailto:sage [2019/06/25(火) 17:11:56.15 ID:CrMrKXln.net] >>215 Win64APIではWoW64というシステムがWin32からWin64への互換性レイヤーになる。
221 名前:デフォルトの名無しさん [2019/06/25(火) 17:35:47.56 ID:XhZtJiMw.net] 32bit OS の場合 System32 = 32bit 用 DLL (Win32API) 64bit OS の場合 System32 = 64bit 用 DLL (64bitWin32API) SysWOW64 = 32bit 用 DLL (32bitWin32API)
222 名前:デフォルトの名無しさん [2019/06/25(火) 17:37:53.13 ID:vGWUuZ9A.net] ありがとうございます これで気にせず昔の情報あされます
223 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 12:39:20.34 ID:LrFGCWwq.net] SysListView32のリストビューで、縦スクロールバーが表示されている状態で、 アイテムをクリックして選択し、すぐにホイールを回してそのアイテムを画面外に出すと、 一定時間後にそのアイテムが表示される位置まで飛んでしまいます。 選択されていないアイテムよりも、すでに選択されているアイテムをクリックした方が、 ホイールを回すまでの時間が多少長くてもその現象が起きます。 これWindows自体のバグでしょうか。 内部のタイマー処理でも絡んでいるのでしょうか。
224 名前:デフォルトの名無しさん [2019/07/10(水) 12:47:11.51 ID:+uFplCdI.net] 君が発見出来るような程度のバグなら 既に誰かが発見して治してるよ
225 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 12:50:54.60 ID:z7915HRG.net] ホイールは3rdパーティーのマウスドライバや常駐もので 余計にメッセージ飛ばしたりすることあるから厄介
226 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 13:04:08.77 ID:GamN/JFp.net] Win10の一年位前のビルドでSysListView32がスクロールバーを出してる状態でドラッグすると 画面右端にカーソルがすっ飛ぶバグがあったな SysListView32使ってるアプリは多いからこれは一般ユーザーもすぐに気付い
227 名前:デフォルトの名無しさん mailto:sage [2019/07/10(水) 13:14:56.30 ID:LrFGCWwq.net] >>222 ホイールでなくスクロールバーのドラッグでも起きました。 操作が難しくなりますが、アイテムをクリックして選択し、 すぐにスクロールバーをドラッグしてそのアイテムを画面外に出すと、やはり同じ現象が起きます。
228 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 10:11:43.64 ID:Bpzge626.net] 全然関係なくて申し訳ないが シングルクリックとダブルクリックの判定って結構難しいよな クリックのメッセージが飛んできても シングルクリックのつもりなのか ダブルクリックの一回目のクリックのつもりなのか その時点では判断が付かない なのでダブルクリックの二回目のクリックが飛んで来るかどうか 少し時間をおいてみるしかない この間にユーザーが何か操作すると
229 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 10:24:09.19 ID:BSTUJEPb.net] >>225 っWM_LBUTTONDBLCLK
230 名前:デフォルトの名無しさん [2019/07/11(木) 10:24:15.51 ID:dt9f58xR.net] アホ発見
231 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 10:27:17.02 ID:xJ4m2V3T.net] かわいい
232 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 10:32:56.46 ID:Bpzge626.net] >>226 WM_LBUTTONDBLCLKが飛んで来たらダブルクリック でも飛んでこないかもしれない(つまりシングルクリック)という事だよ 飛んでくるかどうかは少し待ってみないとわからない エクスプローラでファイルの名前の変更するとき 少し待たされるあの動作 タイマー使ってWM_LBUTTONDBLCLKが来るか少し待ってみるっていう でもこの魔の時間にユーザーが操作することがあって 例えばホイール回したりスクロールバー触ったり
233 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 10:50:36.09 ID:BSTUJEPb.net] >>229 コンパネでダブルクリックの間隔を調節できるから そのへんはユーザーに責任転嫁できる
234 名前:デフォルトの名無しさん [2019/07/11(木) 10:56:55.16 ID:dt9f58xR.net] ダブルクリックはシングルボタンのAppleから持ち込まれた悪臭
235 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 11:57:55.84 ID:6Wf0CyIx.net] >>230 と思うじゃん
236 名前:デフォルトの名無しさん mailto:sage [2019/07/11(木) 23:57:18.00 ID:QGiOPnup.net] 飛んでくるまでいつまで待てばいいですか 少しっていつですか
237 名前:デフォルトの名無しさん mailto:sage [2019/07/12(金) 00:14:57.72 ID:B1Jsh2gD.net] あれ?シングルクリックってダブルクリックになったら、マージされてダブルクリックで処理されると思っていた。
238 名前:デフォルトの名無しさん mailto:sage [2019/07/12(金) 06:48:21.69 ID:dXXCmuDP.net] GetDoubleClickTimeでググれ
239 名前:デフォルトの名無しさん mailto:sage [2019/07/12(金) 10:36:37.27 ID:ueORW37F.net] >>234 マージされるのは二回目のクリック 今言ってるのは一回目のクリックをどう扱うかという話 この一回目のクリックは シングルクリックのつもりなのか ダブルクリックの一回目なのか コンピュータには知る由もない
240 名前:デフォルトの名無しさん mailto:sage [2019/07/12(金) 12:00:48.30 ID:Y/iKed6k.net] なんでここまで説明しないと分からんのだろ 特にハイコンテクストって訳でもないのに
241 名前:デフォルトの名無しさん mailto:sage [2019/07/12(金) 12:24:57.20 ID:gSsTJBIy.net] 誰が誰に対して? 1回目の誰が2回目の誰に対してマージされて処理されるのか? おやすみ
242 名前:デフォルトの名無しさん mailto:sage [2019/07/12(金) 12:53:40.57 ID:nIUn02wm.net] GetCursorPosでポインターの場所、GetKeyStateでマウスボタンが押されてるか離されてるか 取得できるから、あとは時間測って適当にクリックとダブルクリック、ドラッグを判別する SwapMouseButtonで右利き左利きとか、GetDoubleClickTimeでダブルクリック判定する時間とか そんなのを設定できるようにしとけば完璧 これがおまえらが一番納得する方法だろwww
243 名前:デフォルトの名無しさん [2019/07/12(金) 17:04:32.98 ID:Uu5c0ODM.net] 自信満々で嘘書くな迷惑
244 名前:デフォルトの名無しさん mailto:sage [2019/07/13(土) 05:00:55.61 ID:5W75r4eA.net] クリック動作はダブルクリックの直前に発生しても致命的にならないものであればいんでない? クリック 選択 ダブルクリック 実行 これを逆にするようなら難しくなるだけかと
245 名前:デフォルトの名無しさん mailto:sage [2019/08/04(日) 16:34:02.68 ID:78/vdzUN.net] QueryPerformanceFrequencyが10000000を返してくるようになってた 将来はQPCは常に100ナノ秒単位で表しますよってなっていくんだろうか 今回たまたま自分の環境がそうなってしまっただけなんだろうか
246 名前:蟻人間 mailto:sage [2019/08/04(日) 21:08:54.77 ID:QRYqe1Xw.net] https://katahiromz.web.fc2.com/msgcrack/ja Win32の人、使ってみてね。便利だよ。
247 名前:デフォルトの名無しさん [2019/08/05(月) 13:40:42.17 ID:NOA3rn3w.net] グロ中尉
248 名前:デフォルトの名無しさん [2019/08/07(水) 11:59:12.69 ID:6nD1xIcw.net] 現在、AddFontResourceとRemoveFontResourceを使って プログラムからフォントを登録して使っています。 でもこの方法だと、RemoveFontResourceを呼んでも システムを再起動しないと登録されたままになってしまいます。 その間はフォントファイルも削除できないです。 どうにかプログラム使用時だけフォントを有効にする方法はないでしょうか? プログラム終了すれば登録されたフォントも登録解除されるような方法がいいです。
249 名前:デフォルトの名無しさん mailto:sage [2019/08/07(水) 12:59:48.16 ID:u0NlqDQ2.net] >>245 ドキュメントを読むとWM_FONTCHANGEをブロードキャストする必要があるらしいけどやってる? もしくはAddFontResourceExでFR_PRIVATEを指定すると > When the process terminates, the system will remove all fonts installed by the process with the AddFontResourceEx function とあるからそれに頼るのもありかも
250 名前:デフォルトの名無しさん mailto:sage [2019/08/07(水) 13:05:20.88 ID:6nD1xIcw.net] >>246 AddFontResourceExでFR_PRIVATE指定でもしかするといけるかもしれませんね! 試してみます。ありがとうございます。
251 名前:デフォルトの名無しさん mailto:sage [2019/09/05(木) 10:39:03.32 ID:qYKhXOia.net] 質問させてください。 日本語の Windows10 で、Windows Explorer のアドレスバーに 日本語で「デスクトップ」とだけ入力してエンターキーを押すとデスクトップに移動できます。 他にも、「ドキュメント」「ピクチャ」「ダウンロード」「3D オブジェクト」「OneDrive」など いくつかの単語が特定のフォルダーと関連付けられていますが、 この対応をプログラムで調べる方法はありますでしょうか。 例えば SHGetFileInfo を使えばデスクトップのフルパスから 「デスクトップ」という日本語の display name を得ることはできますが、 SHGetFileInfo では上記のような関連付けの有無は判定できませんし、 そもそもフルパスから日本語名を得るのではなくその逆をしたいので、 SHGetFileInfo はあまり役に立たなそうです。 何かお分かりのことがありましたら教えていただけないでしょうか。 どうぞよろしくお願いします。
252 名前:デフォルトの名無しさん mailto:sage [2019/09/05(木) 10:44:01.37 ID:Cn2xW5Dx.net] 内部で対応表持たせるしかないだろ
253 名前:蟻人間 mailto:sage [2019/09/05(木) 11:22:27.86 ID:sYiofqED.net] SHGetLocalizedNameという関数が日本語パス名を返すみたいだが、逆はない。 SHGetSpecialFolderLocation/SHGetSpecialFolderPathで特殊フォルダのパス名を取得し、 SHGetLocalizedNameで日本語パス名を取得する。 それで対応表を作るといいだろう。
254 名前:デフォルトの名無しさん mailto:sage [2019/09/05(木) 11:23:33.11 ID:A2EHupI7.net] それは対応表作るにしても結構苦労するよ 例えば俺のWin10のユーザフォルダの中を見ると 同じフォルダ内にドキュメント、と、ピクチャ、が二つずつあったりする ディスプレイネームが同じでITEMIDLISTが違うアイテムが 同一フォルダに複数存在してたりする環境もあるって事 俺の場合は片方はOneDriveでもう一つはローカル用 同じ名前で同じフォルダ だから単にドキュメントといってもどっちの事か分からんwwwという事態に 苦労するよ、それ
255 名前:デフォルトの名無しさん mailto:sage [2019/09/05(木) 11:28:46.02 ID:A2EHupI7.net] てか、同じ名前のアイテムを同一フォルダに突っ込むWindowsが糞仕様なんだけど 普通に使う分にもどっちがどっちか分からんでムカつく OneDriveの方は「ドキュメント(OneDrive)」とか区別付く名前にしとけよ それかOneDriveっていうフォルダ掘ってその下に配置しろよ 同じ名前のアイテムが同じフォルダにあると混乱することぐらい分かるだろ糞
256 名前:デフォルトの名無しさん mailto:sage [2019/09/05(木) 12:28:53.83 ID:ug+Xr8Ig.net] 独り言はチラ裏へ
257 名前:デフォルトの名無しさん mailto:sage [2019/09/05(木) 12:29:13.60 ID:Cn2xW5Dx.net] アクセス履歴見ながら対応表を順次変更すりゃいい そういうのはアイデア次第でどうとでもなる
258 名前:デフォルトの名無しさん mailto:sage [2019/09/05(木) 12:30:06.05 ID:qYKhXOia.net] >>249 レスどうもありがとうございます。 他の方のレスを拝見してみても、やっぱりなかなか難しそうですね。 >>250 大変有用な情報どうもありがとうございます。この方針が一番現実的そうですね。 SHGetSpecialFolderLocation/SHGetSpecialFolderPath は CSIDL しか受け付けなくて、「3D オブジェクト」のように CSIDL がないフォルダもあるので、 CSIDL の代わりに GUID が使える SHGetKnownFolderIDList を使おうと思います。 ただいずれにしても、どのフォルダの CSIDL/GUID を指定するかは プログラムの段階で決めないという認識で正しいでしょうか? その部分を自動で決められれば最高なのですが難しそうですね。 あと、日本語名を取得するのに SHGetLocalizedName を紹介していただきましたが、 SHGetFileInfo を使うのとどちらがいいでしょうか? SHGetFileInfo なら直接日本語名が得られるのに対して、SHGetLocalizedName だと 'the ID of the localized file name in the resource file' が返ってきますが、 こちらのほうがパフォーマンス的に有利だったりするのでしょうか? >>251 貴重なご意見どうもありがとうございます。確かになかなか問題の根は深そうです。 エクスプローラーのアドレスバーはそのあたりをいい感じに解決しているようなので その仕組みをそのまま拝借できたら楽なのですが、そう簡単には行かなさそうですね。
259 名前:デフォルトの名無しさん mailto:sage [2019/09/05(木) 12:39:12.77 ID:qYKhXOia.net] >>252 >>254 レスどうもありがとうございます。 確かに Windows のフォルダ階層の仕組みは少し分かりにくいところがありますが、 今回の件についてはその問題はあまり関係なくて、 ちょっと誤解を与えてしまっている気がするので改めてやりたいことを説明させていただきます。 エクスプローラでは、今どのフォルダを開いているかにかかわらず、 アドレスバーに単に「デスクトップ」とだけ入力してエンターキーを押せばデスクトップに移動できます。 つまり、エクスプローラーの中では「デスクトップ」という単一の単語とデスクトップのフルパスとが 対応付けられているということになります。そして私は、この対応表を取得したいと考えております。
260 名前:デフォルトの名無しさん mailto:sage [2019/09/05(木) 13:04:18.60 ID:REbzCKHr.net] 質問です。 ファイルに関連付けされている実行ファイルパスを取得するのに FindExecutable()やAssocQueryString()を使っているのですが、 一部関連付けが取得できません。 どうやら関連付け先の実行ファイルの種類がWindowsパッケージ(デスクトップ)版と ストアアプリ版とでは動作が異なるらしく、パッケージ版は上記APIで取得できる ようですがストアアプリ版は取得できないようです。 仕方がないのでレジストリを直接たどる方法を模索しているのですが、 パッケージ版は分かるのですがストアアプリ版がよく分りません。 自分で調べた限りでは、HKCR\{拡張子}\OpenWithProgidsのREG_NONE型の{名前} を元に、HKCR\{名前}\ApplicationのApplicationNameまでたどればいいと いう情報を見つけて実践してみました。が、
261 名前:デフォルトの名無しさん mailto:sage [2019/09/05(木) 13:05:00.53 ID:REbzCKHr.net] (つづき) 実際に.pdfがedgeに関連付けられていて上記APIでは取得できない環境 においてレジストリをたどると \HKCR\.pdf\OpenWithProgids のREG_NONE型の名前「AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723」を元に \HKCR\AppXd4nrz8ff68srnhf9t5a8sbjyar1cr723\Application のApplicationNameまではたどり着きました。 しかしこれに設定されている文字列が @{Microsoft.MicrosoftEdge_44.18362.329.0_neutral__8wekyb3d8bbwe?ms-resource://Microsoft.MicrosoftEdge/Resources/AppName} となっています。 どう見ても実行パスではないというか、これをさらにどうにかするのか たどる方法が間違っているのか分からなくなりました。 正しい方法をよろしくお願いします。
262 名前:デフォルトの名無しさん mailto:sage [2019/09/05(木) 13:11:24.93 ID:d3q2zCXJ.net] >>256 試しにmspaintと入力してエンター押したらペイントが起動しない? と言う事は入力が日本語ならC:\Users\<ユーザー名>\この中の対応するフォルダを開く とか内部でやってるんじゃないかな 英語の場合はLoadLibraryと同じように Explorer.exeと同じディレクトリ Explorer.exeのカレントディレクトリ システムディレクトリ Windowsディレクトリ 環境変数のPATHに指定されてるディレクトリ の順で検索されてmspaintが起動とか
263 名前:デフォルトの名無しさん mailto:sage [2019/09/05(木) 13:14:07.55 ID:d3q2zCXJ.net] 英語とか日本語とか関係なかったねw
264 名前:デフォルトの名無しさん mailto:sage [2019/09/05(木) 22:24:50.64 ID:qYKhXOia.net] >>259 レスありがとうございます。お返事が遅くなってしまい申し訳ないです。 > 試しにmspaintと入力してエンター押したらペイントが起動しない?
265 名前:r> 本当ですね! しかし一方で、C:\Users\<ユーザ名>\AppData というフォルダはあるのに アドレスバーに AppData と入力してエンターを押しても期待通りの動作はせず、 なかなかルールは複雑みたいです。 また、日本語環境ではアドレスバーに「Desktop」と入力してエンターを押しても 期待される動作にはならず、「デスクトップ」でなければならないようなので、 やはりシステムの言語設定は関係あるように思われます。 SHGetFileInfo で取得できる displayName を調べれば 日本語環境ならデスクトップフォルダから「デスクトップ」という文字列が得られるので その逆ができればいいかと思ったのですが、実際はそれほど簡単な問題ではないようです。 例えば私の環境では C:\Users\<ユーザ名> の displayName は ウィンドウズの GUI から設定できる「ユーザ名(アカウント名)」になっていますが、 エクスプローラーのアドレスバーで期待通りの動作になる文字列は 「ユーザ名(アカウント名)」ではなく「フルネーム」でした。 エクスプローラーのアドレスバーの動作を完全に模倣するのは難しそうですが、 ここでいただいたアドバイスを元に、現実的な方法を考えていきたいと思います。 [] [ここ壊れてます]
266 名前:蟻人間 mailto:sage [2019/09/05(木) 22:38:16.11 ID:oF7lOGXi.net] レジストリにAppPathという設定もあるぞ。
267 名前:デフォルトの名無しさん mailto:sage [2019/09/06(金) 19:55:29.68 ID:H/ygVIaK.net] >>261 いくつか気付いた事を報告 その1/2 ・ユーザーフォルダ内のフォルダで移動できたもの アドレス帳 お気に入り デスクトップ ドキュメント ピクチャ ビデオ ミュージック 仮説1 〜\<ユーザー名>\(日本語名で表示される一部のフォルダ)って条件なのかもしれない 仮説2 仮説1の一部のフォルダで法則があるとしたらレジストリで保存場所を変更できるフォルダではないか? 試しに「プログラム」「スタートアップ」と入力しても移動できた レジストリの「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders」 ここに列挙されてるやつがヒントになるかもしれない ・レジストリをヒントに入力して移動できたもの プログラム recent sendto スタート メニュー スタートアップ ・その他で移動できたもの (ツリービューで日本語表記をヒントにした) パブリック コンピュータ ネットワーク コントロール パネル ごみ箱
268 名前:デフォルトの名無しさん mailto:sage [2019/09/06(金) 20:02:10.05 ID:H/ygVIaK.net] いくつか気付いた事を報告 その2/2 ・ここまでの間に気付いた事 アドレスバーに「コ」と入力すると コントロール パネル コンピュータ コンピュータの簡単操作センター この3つの入力候補が現れたけど 入力候補が表示されるのとされないのもあった あと日本語・英語混在(sendto recent)でさらに混乱させる事になってしまったかもしれないw
269 名前:デフォルトの名無しさん mailto:sage [2019/09/06(金) 20:40:37.12 ID:H/ygVIaK.net] ドキュメントがDocumentsの表示になった時の直し方で LocalizedResourceNameが出てくるからそれをヒントにするのもいいかもしれない
270 名前:デフォルトの名無しさん mailto:sage [2019/09/06(金) 23:22:21.54 ID:ZBxclhCf.net] >>262 コメントどうもありがとうございます。 色々とレジストリにもヒントが隠れてそうなので調べてみたいと思います。 >>263-265 大変有用な情報どうもありがとうございます。 書いていただいた内容を見ながら実験してみて分かったこととして、 問題のアドレスバーの挙動は環境によって相当にブレがあるようです。 私の環境(Windows 10 Pro)では、 >>263 に書いていただいた文字列のうち 「recent」「コンピュータ(ちなみにコンピュータ『ー』もダメ)」は 期待通りの動作にならず、代わりにブラウザ(私の環境では Firefox)で 入力した文字列が検索されてしまいました。 私の環境ではアドレスバーに「Creative Cloud Files」と入力すると 対応する Adobe のソフトが作ったフォルダが開かれるので ある程度外部ソフト等の影響があるだろうとは思っていたのですが、 「コンピュータ」ですら環境によって結果が異なるとは予想外でした。 ちなみに外部ソフトの影響に関しては、レジストリの HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace に登録されているものが該当しているような気がするのですが、 確かなことは分かっていません。 ともあれ、非常に興味深い実験結果と考察を読ませていただき 大変勉強になりました。どうもありがとうございます。 また何かお気づきのことがあれば教えていただけると嬉しく思います。
271 名前:デフォルトの名無しさん mailto:sage [2019/09/07(土) 09:05:50.93 ID:/U7tKF4y.net] >>266 10の場合はコンピュータがPCに変わったんだと思う
272 名前:デフォルトの名無しさん [2019/09/07(土) 09:58:32.00 ID:dh6f1+zl.net] これはひどい
273 名前:デフォルトの名無しさん mailto:sage [2019/09/07(土) 13:40:15.53 ID:LGCtCXOo.net] デフォルトで用意されている日本語のフォルダ名を英語に戻す https://laboradian.com/use-en-folder-name/ 11個の日本語名になっているフォルダ 日本語名のフォルダには、desktop.ini という隠しファイルがある
274 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 18:25:54.76 ID:h3dV0Q14.net] Win32アプリのバージョンリソースについての質問です。 自作アプリの1.0.0をリリースした後、1.1.0を作成中にベータ版を出す場合、 リソースのFILEVERSIONやPRODUCTVERSIONはどのように記述するのがよいのでしょうか。 1,1,0,0は、1.1.0の正式版に使いたいのですが、これより大きい値を付けるのも変だし、 数字以外の文字は入力できないようなので。
275 名前:デフォルトの名無しさん mailto:sage [2019/09/12(木) 19:23:34.97 ID:WE18f4SS.net] 1.0.0.1とかはあかんの?