Win32API質問箱 Build87
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/03/28(日) 10:23:58やさしいお兄さんやお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!
過去スレ、関連リンクは>>2-10くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版( http://msdn.microsoft.com/en-us/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
- Win32API質問箱 wiki
http://wiki.livedoor.jp/program1/d/FrontPage
Win32API質問箱 Build86
http://pc12.2ch.net/test/read.cgi/tech/1265350980/
0133デフォルトの名無しさん
2010/04/09(金) 20:08:04何をやってるか示さないと答えようがないわけだが
まぁ>>131の可能性が高そうだけど
0134デフォルトの名無しさん
2010/04/09(金) 23:24:48GetDriveTypeではリムーバブルって返って来るだけで、フロッピーではないかも知れませんし、
SetupDiEnumDeviceInfoとSetupDiGetDeviceRegistryPropertyでQueryDosDeviceで得た文字列と同じものを探して関連付けようと試みましたがヒットしないです...。
QueryDosDeviceでは"\Device\Floppy0"が返って来ましたが、SetupDiGetDeviceRegistryPropertyではフロッピー系は"\Device\FloppyPDO0"が見つかっただけでした
0135デフォルトの名無しさん
2010/04/09(金) 23:41:090136118
2010/04/09(金) 23:58:31ん?ドライブレター変えたらどうすんの???
責任取れるの?
0137デフォルトの名無しさん
2010/04/10(土) 02:26:34なんだてめぇ
0138134
2010/04/10(土) 03:20:140139デフォルトの名無しさん
2010/04/10(土) 08:58:460140デフォルトの名無しさん
2010/04/10(土) 14:15:55\DosDevices\〜からパス取り出して
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enumからそのパスを開いて
ClassGUIDとかで区別できると思うけど
>>135
ねぇPC98版Windowsって知ってる?
0141デフォルトの名無しさん
2010/04/10(土) 14:17:580142デフォルトの名無しさん
2010/04/10(土) 14:18:260143デフォルトの名無しさん
2010/04/10(土) 14:20:210144デフォルトの名無しさん
2010/04/10(土) 14:46:36といちいち設定させるUIでも作った方が確実
アホな自動認識よりはユーザーもそっちを選ぶ
0145デフォルトの名無しさん
2010/04/10(土) 14:57:10Windows98もNTもPC98版が存在したが、いったいなにをどうしておきたいんだ?
0146デフォルトの名無しさん
2010/04/10(土) 18:40:57http://support.microsoft.com/kb/163920/en
0147デフォルトの名無しさん
2010/04/10(土) 20:54:37これってひょっとして名前付きのカーネルオブジェクトならなんでもいいって事?
OpenJobObjectとか
0148デフォルトの名無しさん
2010/04/10(土) 20:55:180149118
2010/04/10(土) 21:35:09WinMainの2つ目の引数を使えばええやん
そのためにあるのだよ
0150デフォルトの名無しさん
2010/04/10(土) 21:39:480151デフォルトの名無しさん
2010/04/10(土) 21:40:08hPrevInstance
アプリケーションの前のインスタンスのハンドルが入ります。
Win32 アプリケーションでは、常に NULL です。
0152デフォルトの名無しさん
2010/04/10(土) 22:02:37自分はそう解釈して、CreateFileMappingで二重起動時にアクティブにしたいWindowハンドル入れて使ってる。
勝手解釈なんで、有識者にほんとに問題ないか聞きたい。
0153デフォルトの名無しさん
2010/04/10(土) 22:03:28Openは使うなよ、全般的に
0154デフォルトの名無しさん
2010/04/10(土) 22:11:010155デフォルトの名無しさん
2010/04/10(土) 22:36:140156デフォルトの名無しさん
2010/04/10(土) 22:39:50どういうこと?
0157デフォルトの名無しさん
2010/04/10(土) 22:48:39坊や何の意味がわからないのだね?
0158デフォルトの名無しさん
2010/04/10(土) 22:55:54なんかおかしくなってた
つまり、libファイルをリンクして、共有セクションのあるDLLが常にロードされるようにしておく
0159118
2010/04/10(土) 23:04:48レジストリにキーを作るくらいダメ解答ばかりやな。
0160デフォルトの名無しさん
2010/04/10(土) 23:07:56でもそれ同じパスにあるDLLがロードされないとだめだろ
0161デフォルトの名無しさん
2010/04/10(土) 23:08:34意味内よねw
0162118
2010/04/10(土) 23:31:400163デフォルトの名無しさん
2010/04/10(土) 23:35:540164デフォルトの名無しさん
2010/04/10(土) 23:49:260165デフォルトの名無しさん
2010/04/11(日) 00:52:400166デフォルトの名無しさん
2010/04/11(日) 14:19:59これが出来ると vc と gcc でソース共通にできそうなのですが。
メニューバーは簡単だった。
0167デフォルトの名無しさん
2010/04/11(日) 20:09:36│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
0168118
2010/04/11(日) 22:11:36SendMessageんとことその他いろいろ変えてみたらまぁそこは解決できたっす。
しかし次の問題点。
メインウィンドウのハンドルをWM_CREATE時にDLL側に渡してるんですよ。
それがメインウィンドウがアクティブなときは大丈夫なんだけど、
アクティブじゃなくなるとそのウィンドウハンドルがどっかいくそうです。笑
WM_CREATEで一度しか渡してないのにghWndの値が勝手に変わってるみたいっす。
勝手にってのはありえないけど、実際俺はghWndの値をその一度しかセットしてないのにNULLになってるんですよ。
WM_CREATEのところはただ単に関数でghWndにウィンドウハンドルを渡すだけですので省略しますね。
HWND ghWnd;
LRESULT CALLBACK MyHookProc (int nCode, WPARAM wp, LPARAM lp)
{
if (nCode<0)
_goto ret;
else if (ghWnd==NULL)
_MessageBox(NULL, "ウィンドウハンドルがないっす笑", "DLL", MB_OK);
else if (wp==VK_ESCAPE)
_PostMessage(ghWnd, WM_KEYHOOK, (WPARAM)0, (LPARAM)0);
ret:
_return CallNextHookEx(hHook, nCode, wp, lp);
}
0169デフォルトの名無しさん
2010/04/11(日) 22:27:090170デフォルトの名無しさん
2010/04/11(日) 22:33:080171118
2010/04/11(日) 22:43:58わからないので具体的にお願いします。
どうすればウィンドウハンドルを保持しつづけられますか?
http://www.kumei.ne.jp/c_lang/sdk2/sdk_163.htm
とか見る限りだとグローバル変数はDLLが開放されるまで値が保持されると思うんですが。
0172デフォルトの名無しさん
2010/04/11(日) 22:48:000173デフォルトの名無しさん
2010/04/11(日) 22:53:44共有したいならセグメントを共有するよう指定してやる必要がある
#pragma data_seg("Shared")
HWND ghWnd = NULL;
#pragma data_seg()
#pragma comment(linker, "/section:Shared,rws")
0174デフォルトの名無しさん
2010/04/11(日) 22:59:49サンプルに毛を生えらかした程度の事で
ハマっちゃう人の気持ちって分かる人は少ないから
全ソースうpってみたら?
0175デフォルトの名無しさん
2010/04/11(日) 22:59:490176118
2010/04/11(日) 23:07:58(建前)
わかんねえなられすすんな
俺の質問に答えてりゃいいんだよ!!!
(本音)
こいつらつかえねー
0177デフォルトの名無しさん
2010/04/11(日) 23:14:17失せろ
0178デフォルトの名無しさん
2010/04/11(日) 23:19:12すっげえわかるw
いわゆる想定外
0179118
2010/04/11(日) 23:22:53そうします。
書き方がやばくて恥ずかしいのであまり晒したくなかったのですが。w
現段階でのソースです。
http://space.geocities.jp/classcircle/MonitorDown.c
http://space.geocities.jp/classcircle/test.c
test.cがDLLのソースで、MonitorDownがメインのソースです。
モニターの電源を、Escが押される、もしくは停止ボタンが押されるまで、メッセージを送り続けることで消そうとしています。
BreakPointは簡単にメッセージボックスを表示させるマクロです。
他にわからない点があったら言ってください。
ボタンが異常に小さいのはリソースからそのまま移植したからです。
0180デフォルトの名無しさん
2010/04/11(日) 23:32:40全ソース
↑意味分かる?日本語だよ
無意味な略語や隠語を使いたがる人がいるけど
そのタイプの構ってさんなのかな?
0181118
2010/04/11(日) 23:39:59BCCですがMakeファイルの使い方知らないんでバッチで代用してます。
http://space.geocities.jp/classcircle/MonitorDown.zip
自作のライブラリっぽいものとヘッダファイルもあわせてこれで全部のはずです。
0182デフォルトの名無しさん
2010/04/11(日) 23:41:460183118
2010/04/11(日) 23:43:20あぁなんかそこ警告出ました。
0184デフォルトの名無しさん
2010/04/11(日) 23:47:11/ ▼▼▼ ヽ
| (●) (●) |
| 三 (_又_)三|
\__ ^_/
/ `ー(Ω)- ' ヽ
i ,イ= ヽ i
U |三 ノU
⊂ニヽ ,r-.、 イ
(,,ノ .ヽ,,)
0185118
2010/04/11(日) 23:47:30メモリマップトファイル?とやらを勉強してから出直してきます。
お騒がせしました。と、ありがとうございました。
0186118
2010/04/11(日) 23:51:03なんだよ、かまってちゃんか
0187デフォルトの名無しさん
2010/04/11(日) 23:52:42>WM_CREATEで一度しか渡してないのに
WM_ACTIVATEAPPのコードは何なんだ。
0188デフォルトの名無しさん
2010/04/12(月) 02:32:02これって符号どうなるの?
0189デフォルトの名無しさん
2010/04/12(月) 03:02:460190118
2010/04/12(月) 03:19:44apiよりキャストの勉強しようず
0191デフォルトの名無しさん
2010/04/12(月) 03:26:38キャストしたからといって符号が変わる訳ではない
0192デフォルトの名無しさん
2010/04/12(月) 10:45:41Unicode非対応のライブラリで扱う必要があります。
とりあえず、GetShortPathNameで8.3形式に変換して渡せば問題ないよう
なのですが、この関数で得た8.3形式のパスに現在のコードページで扱えない
文字が含まれないという確証がありません。
そもそも「8.3形式」とは何なのかをズバリ記述したドキュメントはないものでしょうか?
0193デフォルトの名無しさん
2010/04/12(月) 11:38:01ファイル名は拡張子をのぞいて最長8文字
9文字以上の場合、aaaaaa~1.txt ってかんじで省略される。
ただそれだけ。
だからそのシナリオで8.3形式に変換する意味はない。
0194192
2010/04/12(月) 12:14:22> The DOS filenames are in the OEM character set.
という記述があるのですが、これをMS自身のドキュメントで確認したいんですよね。
0195デフォルトの名無しさん
2010/04/12(月) 12:28:56http://msdn.microsoft.com/en-us/library/aa363807%28VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/ff553060%28VS.85%29.aspx
0196デフォルトの名無しさん
2010/04/12(月) 12:45:48CreateFont()で高さを↓で指定したのと同じように
-MulDiv(Size, GetDeviceCaps(hDC, LOGPIXELSY), 72)
Gdiplus::Font()でサイズを指定して同じ大きさにしたいんですが
普通にGdiplus::UnitPoint にしてサイズを指定しただけでは
サイズによっては大きさが結構違ってしまいます。
どう指定すればいいでしょうか?
0197デフォルトの名無しさん
2010/04/12(月) 13:00:07http://support.microsoft.com/kb/99589/en-us
All characters that are illegal in FAT but legal in NTFS are replaced with underscore characters ("_").
とは書かれているけど、「表」を含むショートファイルファイル名を英語圏に持っていったら
それは「legal in FAT」なのか?
0198192
2010/04/12(月) 13:14:24う〜ん、自分がやってることの裏付けが取れれば十分なので、
そこまで追究するつもりもないのですが……
いかにも問題が起きそうですね、それ。
0199デフォルトの名無しさん
2010/04/12(月) 13:24:18ntfsではオプションだしexfatには存在すらしない
0200デフォルトの名無しさん
2010/04/12(月) 13:37:08「開く」で関連付けされているファイルを自作アプリで開くようにしてるのですが
C:\Documents and Settings\user_name\Local Settings\Temporary Internet Files\Content.IE5\XXYYWWQQ\hoge.abc
のファイルをCrateFileで開こうとすると失敗するようになりました。
VistaのIE7でも失敗します。IE6では問題なかったのですが。
fopen()では開けるのですが下のようなCreateFileでは失敗します。
何かオプションの設定が必要なのでしょうか?
OPENFILENAME ofn;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
hFile = CreateFile(ofn.lpstrFile,
GENERIC_READ, 0, (LPSECURITY_ATTRIBUTES) NULL
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL);
if (hFile == INVALID_HANDLE_VALUE) { TRACE("Fail createfile\n"); return FALSE; }
※ GetOpenFileName(&ofn) は呼んでいません。ofn.lpstrFile にはTemporary ...のフルパスファイル名が入ってます。
0201196
2010/04/12(月) 13:59:16ぐぐってもわかんないや…
0202デフォルトの名無しさん
2010/04/12(月) 14:27:19自己レスです
3番目のオプションに0ではなくて FILE_SHARE_READ を指定したら開けるように
なりました。
0203196
2010/04/13(火) 00:11:37指定してたフォント名が正しくなかった…(スペース入れ忘れ)
でもCreateFontの方はそれを考慮してくれてて
狙ったフォントが表示されていたけど
Gdiplus::Fontの方はそれは考慮されず
違うフォントが表示されていたからフォントサイズが違ってました…
完全に一人相撲でした… スレ汚しすんません!
0204デフォルトの名無しさん
2010/04/13(火) 16:42:01オープン(読み込み状態)することは可能でしょうか?
失敗時にGetLastError() で確認したところ 32 (別プロセスが使用してるためアクセスできない)
を返しています。
CreateFileのパラメータは以下になります。
CreateFile(_T("path"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
0205デフォルトの名無しさん
2010/04/13(火) 16:57:46これでダメなら諦めろ
0206デフォルトの名無しさん
2010/04/13(火) 17:14:27そのパラメータも試してみましたが、無理でした。
ファイルの中身をチェックするTOOLを作成してるので、どうしても読み込みたいのですが・・・
0207デフォルトの名無しさん
2010/04/13(火) 21:24:460208デフォルトの名無しさん
2010/04/13(火) 21:38:43ロックの意味がなくなるので薦めないけど
いったん開いてダメだったら強制的にロック解除して開きなおせばいいんじゃない?
0209デフォルトの名無しさん
2010/04/13(火) 21:42:240210デフォルトの名無しさん
2010/04/13(火) 21:57:48出来るよ
0211デフォルトの名無しさん
2010/04/13(火) 21:58:560212デフォルトの名無しさん
2010/04/13(火) 22:09:29http://d.hatena.ne.jp/higepon/20060321/1142909616
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200512/05120047.txt
0213デフォルトの名無しさん
2010/04/13(火) 22:17:100214デフォルトの名無しさん
2010/04/13(火) 22:48:220215デフォルトの名無しさん
2010/04/13(火) 22:53:200216デフォルトの名無しさん
2010/04/13(火) 22:56:590217デフォルトの名無しさん
2010/04/14(水) 00:29:44OSが掴んでるんだからそんなことはできないと考えるのが普通じゃない?
0218デフォルトの名無しさん
2010/04/14(水) 01:19:55HDDに専用のパーティションを作る方式にした方が安全だし速いだろうに。
ファイルとして他のデータと同列に格納されてるんだから、
非公開のアクセス手段があると考えた方が自然だと思うんだけど。
0219118
2010/04/14(水) 01:43:13ramdiskでも使ってろ
0220デフォルトの名無しさん
2010/04/14(水) 01:50:540221デフォルトの名無しさん
2010/04/14(水) 07:35:290222デフォルトの名無しさん
2010/04/14(水) 11:02:560223118
2010/04/14(水) 13:14:420224デフォルトの名無しさん
2010/04/14(水) 14:36:29これだからLinux脳は
0225デフォルトの名無しさん
2010/04/14(水) 14:47:090226デフォルトの名無しさん
2010/04/14(水) 15:53:48ファイルパスを正規化する方法はないでしょうか?
".."や"."を解決し、なるべく綺麗なパスにする方法です。
例えば
"data/hoge/.././sub/"
を
"data/sub/"
にしてくれるような感じです。
PathCanonicalize がそれに一番近いと思ったのですが、
"..\\test" を "\\test" に変えてしまったり( "..\\test"はそのままで良い")
"test\\..\\hoge" を "\\hoge" に変えてしまったり( "hoge" になってほしい)
どうも挙動が不自然です。
特に先頭に '\\'をつけられてしまうと、fopenなどがうまく動作しません…。
0227デフォルトの名無しさん
2010/04/14(水) 16:00:01とか
0228デフォルトの名無しさん
2010/04/14(水) 16:11:44単純に「\.\」は「\」に置換して、あとは正規表現で「hoge\..\」みたいなパターンを前から順番に削除してけばいいだけじゃん
0229デフォルトの名無しさん
2010/04/14(水) 16:28:20いえ、単に PathCanonicalize みたいなAPIが用意されていたので、APIがあればと思ったのです。
\\ から始まるネットワークアドレスとか、c:\とか、そういう「知らない人は知らない」パスもありますし、自分自身がそれらのパス表記法を全て知っている自信はまったくないもので。
「\.\」も、SJISだと問題がありますしね。
0230デフォルトの名無しさん
2010/04/14(水) 16:34:02みたいなのもあるなー
0231デフォルトの名無しさん
2010/04/14(水) 16:51:56それって実在する可能性のあるパス表記法ですか?
途中に ":" が入っていることなんてあるんでしょうか?
0232118
2010/04/14(水) 17:08:13■ このスレッドは過去ログ倉庫に格納されています