Win32APIについての質問はこちらへどうぞ。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。
英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
■過去スレ
Win32API質問箱 Build122
http://echo.2ch.net/test/read.cgi/tech/1451988219/
Win32API質問箱 Build123©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2016/10/08(土) 12:33:02.29ID:0jaJMPXG
548片山博文MZ ◆T6xkBnTXz7B0
2017/04/10(月) 08:21:28.02ID:73IQobxS "EDIT"にはSS_CENTERは使えないよ。EDITにはES_...スタイルを使う。
549デフォルトの名無しさん
2017/04/10(月) 08:53:21.05ID:ZIRNWk3W >>547
とりあえずコントロール毎に指定フラグが違う事を指摘しておく
とりあえずコントロール毎に指定フラグが違う事を指摘しておく
550デフォルトの名無しさん
2017/04/10(月) 16:45:44.18ID:PH6zMRzh >>547
マルチバイト文字列が上手くいかないなら"AAAA"のようにシングルバイト文字列で試してみればいいじゃないか。
マルチバイト文字列が上手くいかないなら"AAAA"のようにシングルバイト文字列で試してみればいいじゃないか。
551デフォルトの名無しさん
2017/04/10(月) 17:20:37.45ID:vopNHtdq >>547
WM_SETFONTを使って、フォントを関連付けしてみたらどうだい?
WM_SETFONTを使って、フォントを関連付けしてみたらどうだい?
552片山博文MZ ◆T6xkBnTXz7B0
2017/04/10(月) 17:25:49.47ID:73IQobxS SS_CENTERがES_ENDELIPSISとして解釈されたんだろうな。
【今日の教訓】
EDITコントロールには、ES_で始まるスタイルを使え。SS_はEDITには使うな。
【今日の教訓】
EDITコントロールには、ES_で始まるスタイルを使え。SS_はEDITには使うな。
553片山博文MZ ◆T6xkBnTXz7B0
2017/04/10(月) 17:32:00.56ID:73IQobxS ごめん、ES_ENDELIPSISというスタイルはなかった。SS_CENTERの代わりにES_CENTERを指定すればいい。
554デフォルトの名無しさん
2017/04/10(月) 21:33:08.91ID:G1/iiInq なんでESとかSSとか種類が有るの?
555デフォルトの名無しさん
2017/04/10(月) 21:59:23.57ID:PH6zMRzh そりゃ特定のコントロールに対するものだからさ。
あとSS_CENTERもES_CENTERも winuser.h で 0x01L と定義されている。
例えば共通の定義 XX_CENTER 0x01L としていた場合、
EDITコントロールの仕様変更でXX_CENTER 0x02L としたくても
STATICコントロールで同じ意義を使っているため変えることが出来ないだろ。
もし定義を変えた場合、STATICコントロールで0x02L というのは別の意味を持っている(かもしれない)ので動作がおかしくなる。
だから意味は同じでも“値”としては別のものとして扱う(定義する)。
あとSS_CENTERもES_CENTERも winuser.h で 0x01L と定義されている。
例えば共通の定義 XX_CENTER 0x01L としていた場合、
EDITコントロールの仕様変更でXX_CENTER 0x02L としたくても
STATICコントロールで同じ意義を使っているため変えることが出来ないだろ。
もし定義を変えた場合、STATICコントロールで0x02L というのは別の意味を持っている(かもしれない)ので動作がおかしくなる。
だから意味は同じでも“値”としては別のものとして扱う(定義する)。
556デフォルトの名無しさん
2017/04/10(月) 22:00:00.06ID:PH6zMRzh ミス
意義→定義
意義→定義
557デフォルトの名無しさん
2017/04/10(月) 23:44:29.58ID:CESguEkt じゃー将来SS_CENTERが別の値に変更されても安心だね
558デフォルトの名無しさん
2017/04/11(火) 07:55:30.63ID:pJyY6xCH 変えたらひどいことになるけどなw
本音と建前みたいなもんでCの欠点だな。後発言語はそういうとこカバーされてる(のもある)
本音と建前みたいなもんでCの欠点だな。後発言語はそういうとこカバーされてる(のもある)
559デフォルトの名無しさん
2017/04/11(火) 17:52:35.12ID:xC3FSY5Y モーダルダイアログをメインの親とし、その後動的にサブメニューを表示する仕組みがあります。
サブメニュー表示中も親側の操作を可能とするため、サブメニューはモードレスとしていますが、
TABなどのキー入力が効きません。
辛うじて、初期フォーカスがあるボタンのみスペースキーを受け付けます。
マウス操作は問題ありません。
原因としてはサブメニューのキー処理をする IsDialogMessage を含むメッセージループが必要
なんだろうと思いますが、こういう場合の定石というのはあるのでしょうか?
思い付く実装は以下2パターンです。
その1
親もモードレスとし、親のメッセージループ中にサブメニューのメッセージも処理する仕組みを入れる。
その2
サブメニュー表示後に別スレッドを立ち上げ、そこでサブメニューのメッセージループを回す。
普通はこうだよ。とか他の方法などありましたらお願いします。
サブメニュー表示中も親側の操作を可能とするため、サブメニューはモードレスとしていますが、
TABなどのキー入力が効きません。
辛うじて、初期フォーカスがあるボタンのみスペースキーを受け付けます。
マウス操作は問題ありません。
原因としてはサブメニューのキー処理をする IsDialogMessage を含むメッセージループが必要
なんだろうと思いますが、こういう場合の定石というのはあるのでしょうか?
思い付く実装は以下2パターンです。
その1
親もモードレスとし、親のメッセージループ中にサブメニューのメッセージも処理する仕組みを入れる。
その2
サブメニュー表示後に別スレッドを立ち上げ、そこでサブメニューのメッセージループを回す。
普通はこうだよ。とか他の方法などありましたらお願いします。
560デフォルトの名無しさん
2017/04/11(火) 17:55:40.75ID:xC3FSY5Y ちょっと語弊がありましたので訂正です。
ここで言う「サブメニュー」とは、CreateMenu などで作られる一般的に言うメニューではなく、
単なるポップアップスタイルのタイトルなしダイアログのことです。
CreateDialog で画面を作っています。
勝手に言葉を作ってすみません。
ここで言う「サブメニュー」とは、CreateMenu などで作られる一般的に言うメニューではなく、
単なるポップアップスタイルのタイトルなしダイアログのことです。
CreateDialog で画面を作っています。
勝手に言葉を作ってすみません。
561デフォルトの名無しさん
2017/04/11(火) 18:23:36.29ID:9HH9Hffg 2つウインドウがあって、1つはメインウインドウ、もう1つはメニューウインドウ
メインウインドウにキーフォーカスがあるとメニューウインドウでキー操作できず、メニューウインドウにフォーカスがあるとメインウインドウでキー操作できない
メッセージを適宜流せばいいんじゃないか?
メインウインドウにキーフォーカスがあるとメニューウインドウでキー操作できず、メニューウインドウにフォーカスがあるとメインウインドウでキー操作できない
メッセージを適宜流せばいいんじゃないか?
562デフォルトの名無しさん
2017/04/11(火) 22:23:16.04ID:xC3FSY5Y フォーカスはそれがあるウィンドウで処理できるようなUIを考えています。
ユーザーがメインウィンドウにフォーカスを(マウスなどで)移せば、
以降はそのウィンドウでキーボード操作ができればいいです。その逆も然り。
適宜メッセージを流すにしても、結局どこでメッセージループを回すかという
話になるのではと思うのですが、違うのでしょうか?
ユーザーがメインウィンドウにフォーカスを(マウスなどで)移せば、
以降はそのウィンドウでキーボード操作ができればいいです。その逆も然り。
適宜メッセージを流すにしても、結局どこでメッセージループを回すかという
話になるのではと思うのですが、違うのでしょうか?
563デフォルトの名無しさん
2017/04/12(水) 22:43:12.22ID:iYQoJoP4 なにいってんだこいつ
564デフォルトの名無しさん
2017/04/12(水) 23:28:35.38ID:lhjyuLrL 分からないのに無理して答えるなよ
565デフォルトの名無しさん
2017/04/13(木) 02:45:23.01ID:8XBnDqPS 最近よく足がつる
566デフォルトの名無しさん
2017/04/13(木) 11:42:08.71ID:9jlRESvt >>562
フォーカスを移してキーボード操作なんて危険なことを平気でやろうとする人はWin32APIなんて使わない方が良いんじゃね?
普通はフォーカスを移そうとしているオブジェクトにフォーカスを移す移さない関係なく文字列送信するもんじゃないの?
キーボード操作中にユーザーが別のウィンドウをクリックした場合とか考えないの?
フォーカスを移してキーボード操作なんて危険なことを平気でやろうとする人はWin32APIなんて使わない方が良いんじゃね?
普通はフォーカスを移そうとしているオブジェクトにフォーカスを移す移さない関係なく文字列送信するもんじゃないの?
キーボード操作中にユーザーが別のウィンドウをクリックした場合とか考えないの?
567デフォルトの名無しさん
2017/04/13(木) 13:32:39.75ID:OCOdT3+H568デフォルトの名無しさん
2017/04/13(木) 17:59:38.26ID:zh4lU2gJ >>566
なんで何も理解できていないのに無理に話に入ろうとするの?
なんで何も理解できていないのに無理に話に入ろうとするの?
569デフォルトの名無しさん
2017/04/13(木) 18:16:04.36ID:xmE6C1ua spyで見てどこにメッセージ届いてるか見ろ
570デフォルトの名無しさん
2017/04/14(金) 00:20:20.46ID:+RGtmVs/ フォースを使うのじゃ
571デフォルトの名無しさん
2017/04/14(金) 00:39:04.52ID:6ECgJlCU Windows 10 Creators Update入れたら
DrawTextで大きめのフォントの描画が異常に遅くなった。
高DPI未対応のアプリは見捨ててGDIはシンプルに動いてほしい。
DrawTextで大きめのフォントの描画が異常に遅くなった。
高DPI未対応のアプリは見捨ててGDIはシンプルに動いてほしい。
572デフォルトの名無しさん
2017/04/14(金) 05:38:58.24ID:kIyPPZzD >>567
2行目めちゃくちゃだなw
2行目めちゃくちゃだなw
573デフォルトの名無しさん
2017/04/14(金) 10:41:54.49ID:7fCdXhh/574デフォルトの名無しさん
2017/04/14(金) 11:11:32.10ID:LVRPT4/o Win32APIの後継でc++/cliじゃないライブラリってないのかね?
575デフォルトの名無しさん
2017/04/14(金) 11:29:24.19ID:iAr+rl+J576デフォルトの名無しさん
2017/04/14(金) 15:40:59.51ID:Z/bjVn5R しいて言えばQtじゃね?
Qtのアプリって結構あるよね
Qtのアプリって結構あるよね
577デフォルトの名無しさん
2017/04/14(金) 18:23:47.19ID:R7yCPQGT >>574
ライブラリってかAPIはユニバーサルwinのがそれじゃないの?
ライブラリってかAPIはユニバーサルwinのがそれじゃないの?
578デフォルトの名無しさん
2017/04/14(金) 18:31:24.82ID:uRqmXJpf WinRT API
579デフォルトの名無しさん
2017/04/14(金) 22:27:03.58ID:Gjx6wpyy ここでWTLがまさかの大復活を遂げるわけよ
580デフォルトの名無しさん
2017/04/15(土) 06:16:39.59ID:qt9qpnGQ ちょっとしたもんつくるにはwtlが一番いい
581デフォルトの名無しさん
2017/04/15(土) 18:14:11.71ID:JjgxHVsv582デフォルトの名無しさん
2017/05/05(金) 00:01:23.37ID:j+7+fM28 Windows10S では Win32/.net アプリは動かないだと。
UWPに変換すれば行けるらしいが、もうおしまいか?
UWPに変換すれば行けるらしいが、もうおしまいか?
583デフォルトの名無しさん
2017/05/05(金) 00:15:11.42ID:NU+YZp1H Windows10Sが相手にされなくて終わるだけ。
584デフォルトの名無しさん
2017/05/05(金) 00:41:30.18ID:W8ns9+oF 既に相手されていない感
585デフォルトの名無しさん
2017/05/05(金) 03:08:44.86ID:IUUvTOhg お前らが相手にされてないじゃん
おっさんしかいないだろうこのスレ
おっさんしかいないだろうこのスレ
586デフォルトの名無しさん
2017/05/05(金) 08:12:57.54ID:WdEsZnG0 今回のターゲット層はメインストリームじゃないから
既存のアプリが使えなくても不満は少ないと踏んでるんだろう
まあWindowsRTみたいに核爆死はしないんじゃないか
MSもそんなに数を出荷しないだろうから
もう一度WindowsRTをSurfaceやらに載せることを夢見ているのなら
やはりもう一度爆死するだろう
既存のアプリが使えなくても不満は少ないと踏んでるんだろう
まあWindowsRTみたいに核爆死はしないんじゃないか
MSもそんなに数を出荷しないだろうから
もう一度WindowsRTをSurfaceやらに載せることを夢見ているのなら
やはりもう一度爆死するだろう
587デフォルトの名無しさん
2017/05/05(金) 18:13:03.55ID:ERU+CvkU 教育用途だっけ
今時のキッズは学校支給タブレットの制限外してゲームしてるらしいからその点ではいいかもな
今時のキッズは学校支給タブレットの制限外してゲームしてるらしいからその点ではいいかもな
588片山博文MZ ◆T6xkBnTXz7B0
2017/05/06(土) 18:59:21.43ID:0OTJXmRc あるプログラムで使用中のGDIオブジェクトの個数を数える方法はありますか?
589デフォルトの名無しさん
2017/05/06(土) 20:36:55.22ID:TAVkl+y8 タスクマネージャで見れるよ
590デフォルトの名無しさん
2017/05/06(土) 20:50:23.24ID:IA0Dpe0I GetGuiResources(hProcess, GR_GDIOBJECTS)
591デフォルトの名無しさん
2017/05/06(土) 20:53:17.94ID:Mwx5Td89592片山博文MZ ◆T6xkBnTXz7B0
2017/05/06(土) 20:54:47.07ID:NWV3MG9s ありがとー。
593デフォルトの名無しさん
2017/05/06(土) 21:06:22.69ID:HiVS0qll なにするつもりなのさ
594片山博文MZ ◆T6xkBnTXz7B0
2017/05/06(土) 21:08:39.06ID:NWV3MG9s メモリーリーク対策やデバッグやらだよ。
595雪風
2017/05/06(土) 21:54:04.69ID:QwsGrGdx >>593
自演 オナヌーだろ
自演 オナヌーだろ
596デフォルトの名無しさん
2017/05/06(土) 22:06:22.10ID:sQ11ayCM 書いてて恥ずかしくないの?
597デフォルトの名無しさん
2017/05/07(日) 02:01:32.34ID:KMqw+OzL598デフォルトの名無しさん
2017/05/07(日) 07:23:08.46ID:fOF53fEF firefoxとかリーク笑えるよな
599デフォルトの名無しさん
2017/05/09(火) 09:36:37.30ID:PBqzgUoz 特定のアプリケーションがハング状態になってるかを判断する方法ありませんか?
.netではRespondingプロパティで判断できるようですがwin32apiでやりたいので
.netではRespondingプロパティで判断できるようですがwin32apiでやりたいので
600デフォルトの名無しさん
2017/05/09(火) 09:45:13.26ID:XSL1JKA6 そこまで分かってるならソース読めよ
https://github.com/Microsoft/referencesource/blob/master/System/services/monitoring/system/diagnosticts/Process.cs
SendMessageTimeoutでWM_NULLを投げてるだけだな
https://github.com/Microsoft/referencesource/blob/master/System/services/monitoring/system/diagnosticts/Process.cs
SendMessageTimeoutでWM_NULLを投げてるだけだな
601デフォルトの名無しさん
2017/05/09(火) 10:04:41.73ID:4hsRJ4JE その質問コピペだよ
602デフォルトの名無しさん
2017/05/09(火) 10:17:40.46ID:PBqzgUoz ありがとうございました!
603デフォルトの名無しさん
2017/05/09(火) 11:30:51.02ID:fjUlBZmQ >>600
これ使ってDoS攻撃みたいなこと出来るんかな
これ使ってDoS攻撃みたいなこと出来るんかな
604デフォルトの名無しさん
2017/05/09(火) 21:20:50.87ID:2/UhKD8y 最近のアプリに多い、重い処理は別スレッドで実行してGUIが固まらないようにしてる場合は役に立たないかな
605デフォルトの名無しさん
2017/05/09(火) 21:48:08.53ID:LCRfM0F6 >>604
それは「重い処理のときにハングアップしているように見える」というだけの話で、
そういうレベルでの意味ならマルチスレッド化によって役には立たない。
でもそういうマルチスレッド化したソフトウェアでも
画面描画の時の不具合などでハングアップすることもあるわけで役に立たないということはないよ。
それは「重い処理のときにハングアップしているように見える」というだけの話で、
そういうレベルでの意味ならマルチスレッド化によって役には立たない。
でもそういうマルチスレッド化したソフトウェアでも
画面描画の時の不具合などでハングアップすることもあるわけで役に立たないということはないよ。
606デフォルトの名無しさん
2017/05/09(火) 22:06:52.23ID:2/UhKD8y607デフォルトの名無しさん
2017/05/09(火) 23:47:50.15ID:Ephb2XFu ウィンドウがわかるならIsHungAppWindowってのがある
608デフォルトの名無しさん
2017/05/10(水) 02:35:27.31ID:bnhY1qc6 >>606
動画の変換みたいに純粋に時間がかかる場合とか、ユーザーのクリック待ちとかもあるから、判断はできんだろうな
動画の変換みたいに純粋に時間がかかる場合とか、ユーザーのクリック待ちとかもあるから、判断はできんだろうな
609デフォルトの名無しさん
2017/05/10(水) 02:56:46.04ID:SJjrbjyQ 止めようとしても停まらないもの?
WindowsUpdateかな?
WindowsUpdateかな?
610デフォルトの名無しさん
2017/05/10(水) 11:25:51.30ID:Cp7+CNi6 >>609
ネットワーク切れてからのタイムアウトも異常に遅いんだよな
ネットワーク切れてからのタイムアウトも異常に遅いんだよな
611デフォルトの名無しさん
2017/05/14(日) 19:29:07.89ID:QF9yNcvN まだ見放されてないぞ
【IT】マイクロソフト、サポート切れOS「Windows 8、Windows XP、Windows Server 2003」にも修正ソフト提供
asahi.2ch.net
test/read.cgi/newsplus/1494723803
【IT】マイクロソフト、サポート切れOS「Windows 8、Windows XP、Windows Server 2003」にも修正ソフト提供
asahi.2ch.net
test/read.cgi/newsplus/1494723803
612デフォルトの名無しさん
2017/05/19(金) 19:48:39.48ID:7xgwPeWo 質問ささてください
構造体AをGlobalAllocで領域を確保して値を入れた後、構造体BをGlobalAllocで確保すると、構造体Aのメンバであるポインタのアドレスが変わってしまうのですが何が原因なのでしょうか?
構造体AをGlobalAllocで領域を確保して値を入れた後、構造体BをGlobalAllocで確保すると、構造体Aのメンバであるポインタのアドレスが変わってしまうのですが何が原因なのでしょうか?
613デフォルトの名無しさん
2017/05/19(金) 20:35:00.88ID:bDipVMhT あるプロセスのメモリ情報のリージョンサイズや属性を調べるにはどのAPIを使えばいいですか?
614デフォルトの名無しさん
2017/05/19(金) 20:49:42.55ID:McGsnd5l >>612
Windowsは働き者の賢いOSだからなぁ
Windowsは働き者の賢いOSだからなぁ
615デフォルトの名無しさん
2017/05/19(金) 21:09:20.04ID:/MnRfLXT 動かしたくないならLockしてください
616デフォルトの名無しさん
2017/05/19(金) 21:11:02.62ID:vqbyNvRL >>612
GlobalAllocじゃなくて自分で書き換えてるんでしょ
GlobalAllocじゃなくて自分で書き換えてるんでしょ
617デフォルトの名無しさん
2017/05/19(金) 21:22:03.75ID:Q8L1LGu9 >>612
GMEM_FIXEDを指定していないGlobalAllocでロックカウントが0の場合はメモリの再配置が起きる
GlobalLockとGlobalUnlockの間なら
「構造体Aのメンバであるポインタのアドレス」は変わることがないけど
GlobalUnlockを呼び出しロックを解除した場合は再配置される可能性がある
GMEM_FIXEDを指定していないGlobalAllocでロックカウントが0の場合はメモリの再配置が起きる
GlobalLockとGlobalUnlockの間なら
「構造体Aのメンバであるポインタのアドレス」は変わることがないけど
GlobalUnlockを呼び出しロックを解除した場合は再配置される可能性がある
618デフォルトの名無しさん
2017/05/20(土) 18:36:33.10ID:urI3JAo7619デフォルトの名無しさん
2017/05/20(土) 18:43:52.60ID:YAniTqrY 違うんじゃね
620デフォルトの名無しさん
2017/05/20(土) 19:05:41.41ID:rnnQH6fx ソースコードにイージーミスがある可能性の方がクッソ高いと思う
621デフォルトの名無しさん
2017/05/20(土) 19:06:46.68ID:opost44+622デフォルトの名無しさん
2017/05/20(土) 19:08:39.87ID:YAniTqrY 必要最小限の再現ソース晒してからだな
623デフォルトの名無しさん
2017/05/21(日) 02:26:55.08ID:8+aEBKAw 構造体A、もしくはその近くのメモリ確保量が足りていないような気がする
スタック破壊、または、メモリ内容破壊では?
スタック破壊、または、メモリ内容破壊では?
624デフォルトの名無しさん
2017/05/21(日) 10:34:21.57ID:UufpipHO >>613
VirtualQueryEx
VirtualQueryEx
625デフォルトの名無しさん
2017/05/21(日) 10:40:12.71ID:8IHB32RP すみません。自分がC++素人でメモリ周り疎いのでよくあるトラブルかなと思い、動作確認できている部分は抽象的に書きました。イージーミスの可能性はかなりあります。
ソースが手元にないのですが、具体的にはこのような処理をしています。スマホから書いたので文法ミスあるかもしれません。
メイン処理
DWOR count=0;
LPBYTE pStructA = (LPBYTE)GlobalAlloc(GHND,sizeof(0));
GetPrinterInfo(pStructA,&count);//自作関数 pStructAに構造体格納
/*ここでブレーク張ってpStructAのpNameのアドレスが正しい文字列指してるのは確認済み*/
PStructB pStructB = (PStructB)GlobalAlloc(GHND,sizeof(StructB)*count);
/*ここで改めてpNameを取得しようとするとpNameのアドレスがpStructBを確保する前と変わっている。元の文字列データは以前として前のアドレス上に存在してることは確認済み。pStructA自体のアドレスは変わっていない
*/
for(i=0 ;i<count;i++){
LPTSTR name= (((PRINTER_INFO_1*)pStructA)+count)->pName;
}
〜〜〜
自作関数 (動作確認済み)
DWORD GetPrinterInfo(LPBYTE pStructA, LPDWORD count){
DWORD result=0;
DWORD pNeeded=0;
//必要サイズ取得
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,NULL,pdw
&pNeeded,count);
//必要サイズ再確保
Global ReAlloc(pStructA,pNeeded,GHND);
//ここでPRINTER_INFO_1構造体をpStructAに格納
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,pStructA,pdw
pNeeded,count);
return result;
}
ソースが手元にないのですが、具体的にはこのような処理をしています。スマホから書いたので文法ミスあるかもしれません。
メイン処理
DWOR count=0;
LPBYTE pStructA = (LPBYTE)GlobalAlloc(GHND,sizeof(0));
GetPrinterInfo(pStructA,&count);//自作関数 pStructAに構造体格納
/*ここでブレーク張ってpStructAのpNameのアドレスが正しい文字列指してるのは確認済み*/
PStructB pStructB = (PStructB)GlobalAlloc(GHND,sizeof(StructB)*count);
/*ここで改めてpNameを取得しようとするとpNameのアドレスがpStructBを確保する前と変わっている。元の文字列データは以前として前のアドレス上に存在してることは確認済み。pStructA自体のアドレスは変わっていない
*/
for(i=0 ;i<count;i++){
LPTSTR name= (((PRINTER_INFO_1*)pStructA)+count)->pName;
}
〜〜〜
自作関数 (動作確認済み)
DWORD GetPrinterInfo(LPBYTE pStructA, LPDWORD count){
DWORD result=0;
DWORD pNeeded=0;
//必要サイズ取得
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,NULL,pdw
&pNeeded,count);
//必要サイズ再確保
Global ReAlloc(pStructA,pNeeded,GHND);
//ここでPRINTER_INFO_1構造体をpStructAに格納
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,pStructA,pdw
pNeeded,count);
return result;
}
626デフォルトの名無しさん
2017/05/21(日) 11:10:23.22ID:Bmvuj1qA GlobalAllocの戻り値のハンドルを直接キャストしてポインタに代入したら駄目だろ
ハンドルを引数としてGlobalLockを呼び出して、その戻り値をキャストしてポインタに代入しろ
ハンドルを引数としてGlobalLockを呼び出して、その戻り値をキャストしてポインタに代入しろ
627デフォルトの名無しさん
2017/05/21(日) 11:25:17.73ID:8zMWeNzv 蓋を開けてみればやはりこんなもんだ
p = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size);
HeapFree(GetProcessHeap(), 0, p);
でうまくやってるよ,GlobalAlloc は win3.1 の仕様を下敷きにしているので使いにくいよ
HeapFree(GetProcessHeap(), 0, p);
でうまくやってるよ,GlobalAlloc は win3.1 の仕様を下敷きにしているので使いにくいよ
629デフォルトの名無しさん
2017/05/21(日) 14:52:03.05ID:2E7Z41P0 オワコンだしな
今はもうmallocでいいよ
今はもうmallocでいいよ
>>629
それはどこにあるのかな?
それはどこにあるのかな?
631デフォルトの名無しさん
2017/05/21(日) 16:25:59.44ID:qIzrXw0L >>625
関数の仕様ぐらい確認しろといいたい
https://msdn.microsoft.com/ja-jp/library/cc430065.aspx
GMEM_FIXEDを指定していないGlobalAllocはメモリハンドルを返す
アドレスではなくハンドルであり、このハンドルをGlobalLockに渡すことでメモリアドレスを取得できる
メイン処理
DWORD count=0;
HGLOBAL gm = GlobalAlloc(GHND,sizeof(0));
GetPrinterInfo(gm,&count);
LPBYTE pStructA = (LPBYTE)GlobalLock(gm);
for(i=0 ;i<count;i++){
LPTSTR name= ((PRINTER_INFO_1*)pStructA)[i].pName;
}
〜〜〜
DWORD GetPrinterInfo(HGLOBAL gm, LPDWORD count){
DWORD dwSize;
DWORD result=0;
DWORD pNeeded=0;
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,NULL,0,&pNeeded,count);
Global ReAlloc(gm,pNeeded,GHND);
dwSize = GlobalSize(gm);
LPBYTE pStructA = (LPBYTE)GlobalLock(gm);
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,pStructA,dwSize,&pNeeded,count);
GlobalUnlock(gm);
return result;
}
関数の仕様ぐらい確認しろといいたい
https://msdn.microsoft.com/ja-jp/library/cc430065.aspx
GMEM_FIXEDを指定していないGlobalAllocはメモリハンドルを返す
アドレスではなくハンドルであり、このハンドルをGlobalLockに渡すことでメモリアドレスを取得できる
メイン処理
DWORD count=0;
HGLOBAL gm = GlobalAlloc(GHND,sizeof(0));
GetPrinterInfo(gm,&count);
LPBYTE pStructA = (LPBYTE)GlobalLock(gm);
for(i=0 ;i<count;i++){
LPTSTR name= ((PRINTER_INFO_1*)pStructA)[i].pName;
}
〜〜〜
DWORD GetPrinterInfo(HGLOBAL gm, LPDWORD count){
DWORD dwSize;
DWORD result=0;
DWORD pNeeded=0;
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,NULL,0,&pNeeded,count);
Global ReAlloc(gm,pNeeded,GHND);
dwSize = GlobalSize(gm);
LPBYTE pStructA = (LPBYTE)GlobalLock(gm);
EnumPrinter(PRINTER_ENUM_LOCAL,NULL,1,pStructA,dwSize,&pNeeded,count);
GlobalUnlock(gm);
return result;
}
632デフォルトの名無しさん
2017/05/21(日) 16:40:14.23ID:s+TjotGN GMEM_MOVEABLE
移動可能メモリを割り当てます。Win32 環境では、物理メモリ内でメモリブロックが移動されることは決してありませんが、既定のヒープ内で移動することは可能です。
戻り値は、メモリオブジェクトのハンドルです。このハンドルをポインタへ変換するには、GlobalLock 関数を使います。
この値を GMEM_FIXED フラグと組み合わせることはできません。
Win32では移動することがないあるよって言ってるし、GPTRフラグを使うか、メモリ確保をmallocなりに置き換えたほうが良いね
EnumPrintersに渡すバッファのポインタは別になんでも良いみたいだし
移動可能メモリを割り当てます。Win32 環境では、物理メモリ内でメモリブロックが移動されることは決してありませんが、既定のヒープ内で移動することは可能です。
戻り値は、メモリオブジェクトのハンドルです。このハンドルをポインタへ変換するには、GlobalLock 関数を使います。
この値を GMEM_FIXED フラグと組み合わせることはできません。
Win32では移動することがないあるよって言ってるし、GPTRフラグを使うか、メモリ確保をmallocなりに置き換えたほうが良いね
EnumPrintersに渡すバッファのポインタは別になんでも良いみたいだし
633デフォルトの名無しさん
2017/05/21(日) 16:51:37.43ID:UufpipHO GlobalAllocはクリップボード弄る時くらいでいいよ
634デフォルトの名無しさん
2017/05/21(日) 18:27:54.67ID:8+aEBKAw こうゆう奴がプロジェクトにいると、デバックでは動くがリリースでは動かない
プログラムとか出来上がるんだろうな。。。
(もちろん、リリース+デバック情報埋込なら動く最悪のパターン)
プログラムとか出来上がるんだろうな。。。
(もちろん、リリース+デバック情報埋込なら動く最悪のパターン)
635デフォルトの名無しさん
2017/05/22(月) 03:45:08.81ID:6WP6IGo9 mallocでも、newでも好きなのつかったらいいんじゃね?
636デフォルトの名無しさん
2017/05/22(月) 07:02:35.87ID:1fjxccfj sizeof(0) ...
637デフォルトの名無しさん
2017/05/22(月) 10:58:01.86ID:ZhEHdQZR みなさま本当にありがとうございました。
メモリ確保の方法に関しては古いのはなんとなくわかってるのですが、意見できる程知識がないのが実情です……
ともあれ解決方法の兆しが見えたので頑張ってみます。
>>634
耳が痛いですが自分も本当にそう思います……個人的には勉強になるのでいいんですが……
リリース気をつけておきます
メモリ確保の方法に関しては古いのはなんとなくわかってるのですが、意見できる程知識がないのが実情です……
ともあれ解決方法の兆しが見えたので頑張ってみます。
>>634
耳が痛いですが自分も本当にそう思います……個人的には勉強になるのでいいんですが……
リリース気をつけておきます
638片山博文MZ ◆T6xkBnTXz7B0
2017/05/26(金) 15:19:18.57ID:hi3mNk6y639片山博文MZ ◆T6xkBnTXz7B0
2017/05/27(土) 10:36:14.50ID:je1Ltzc3640デフォルトの名無しさん
2017/05/27(土) 10:39:23.30ID:I7pwMhhb 皆さんは、ダイアログの HWND に対し SetWindowLongPtr, GetWindowLongPtr を使用する場合
GWLP_USERDATA と DWLP_USER をどのように使い分けていますか?
GWLP_USERDATA と DWLP_USER をどのように使い分けていますか?
641デフォルトの名無しさん
2017/05/27(土) 13:16:53.40ID:olQh0zw8 使い分けもなにも
get してから & とか | とかして set してる
get してから & とか | とかして set してる
642デフォルトの名無しさん
2017/06/14(水) 11:22:26.39ID:+7k/9HY0 エディットボックスにES_MULTILINEを付けると
Ctrl+Aですべて選択ができなくなってしまうのだけど、
これはなにか技術的な理由があってのことですか?
それとも、昔から修正されていないだけのバグですか?
Ctrl+Aですべて選択ができなくなってしまうのだけど、
これはなにか技術的な理由があってのことですか?
それとも、昔から修正されていないだけのバグですか?
643デフォルトの名無しさん
2017/06/14(水) 11:39:15.66ID:+7k/9HY0 642の追記ですが、ES_MULTILINEだけでなく、ES_READONLYを付けたときも、
同じようにCtrl+Aが効かなくなるようです。
同じようにCtrl+Aが効かなくなるようです。
644デフォルトの名無しさん
2017/06/14(水) 12:11:52.68ID:Jdv7hZ4r >>643
それはサブクラス化で対応
それはサブクラス化で対応
645デフォルトの名無しさん
2017/06/14(水) 12:19:57.15ID:+7k/9HY0 >>644
つまり、ES_MULTILINEやES_READONLYはCtrl+Aに対応すべき状態ではない
というような技術的な理由があるわけではなく、
単にマイクロソフトが修正していない昔からのバグで、
サブクラス化などで対応しても問題ないものなんですよね?
つまり、ES_MULTILINEやES_READONLYはCtrl+Aに対応すべき状態ではない
というような技術的な理由があるわけではなく、
単にマイクロソフトが修正していない昔からのバグで、
サブクラス化などで対応しても問題ないものなんですよね?
646デフォルトの名無しさん
2017/06/14(水) 13:35:54.11ID:pxuX+RKK ctrl+aが全選択という統一ルールがないとかなんとか
647デフォルトの名無しさん
2017/06/14(水) 19:35:40.93ID:+7k/9HY0648デフォルトの名無しさん
2017/06/15(木) 10:24:59.35ID:0e975zeL >>647
挙動としては認識通り
技術的な問題ではないのでサブクラスなりインスタンスなりのKeyDownイベントでSelectAll()して構わない
普通はついでにCopy()やCut()のショートカットキー処理もつけておく
挙動としては認識通り
技術的な問題ではないのでサブクラスなりインスタンスなりのKeyDownイベントでSelectAll()して構わない
普通はついでにCopy()やCut()のショートカットキー処理もつけておく
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★3 [おっさん友の会★]
- 【速報】中国、水産物輸入停止と通達 日本政府に ★2 [おっさん友の会★]
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★4 [おっさん友の会★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 [ぐれ★]
- 中国側が首相答弁の撤回要求、日本側拒否★6 [夜のけいちゃん★]
- 【速報】 米大使「はっきりさせておこう、米国は尖閣諸島含め日本の防衛に全面コミット、中国がどうしようが変わらない」 [お断り★]
- 【速報】高市首相「つい言い過ぎた」 存立危機事態の答弁について [237216734]
- 【ネトウヨ朗報】イギリスのトラス元首相、高市有事で高市早苗の支持を表明 [603416639]
- 【高市訃報】ホタテ業者、死亡😇😇😇 [573041775]
- 【速報】中国、水産物輸入停止★2 [989870298]
- 立憲岡田「高市さんはなぜ慎重な答弁をされなかったのか。非常に残念に思っている」 [834922174]
- 【悲報】斎藤元彦陣営のネット広報担当会社が投稿したnoteで騒然 ★950 [931948549]
