Win32API質問箱 Build33
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2005/07/01(金) 02:45:20やさしいお兄さんたちが答えてくれるかも。
∧_∧
( ´∀`) < 0x20
過去スレ、関連リンクは>>2-5くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com)の利用推奨
・APIフックなど高度な事をしたい場合はできるだけAdvencedWindowsを読みましょう
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
0002デフォルトの名無しさん
2005/07/01(金) 02:50:39Build32:http://pc8.2ch.net/test/read.cgi/tech/1117271829/
0003デフォルトの名無しさん
2005/07/01(金) 02:51:19Build31:http://pc8.2ch.net/test/read.cgi/tech/1114762194/
Build30:ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
Build29:ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
Build28:ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
Build27:ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
Build26:ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
Build25:ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
Build24:ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
Build23:ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
Build22:ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
Build21:ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
Build20:ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
Build19:ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
Build18:ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
Build17:ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
Build16:ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/★
Build15:ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/★
Build14:ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
Build13:ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
Build12:ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:ttp://pc.2ch.net/tech/kako/991/991576947.html
0004デフォルトの名無しさん
2005/07/01(金) 02:51:51http://www.microsoft.com/japan/msdn/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
http://www.google.com/
Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
Win32 プログラミング入門
http://www7.plala.or.jp/keny01/windows/win32/
Win32 SDK Programming
http://usr_vogel.at.infoseek.co.jp/Win32SDK/
■書籍
Advanced Windows
http://www.amazon.co.jp/exec/obidos/ASIN/4756138055
0005デフォルトの名無しさん
2005/07/01(金) 02:52:48- WindowsR Server 2003 SP1 Platform SDK Full Download
http://www.microsoft.com/downloads/details.aspx?familyid=EBA0128F-A770-45F1-86F3-7AB010B398A3&displaylang=en
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
0006デフォルトの名無しさん
2005/07/01(金) 02:59:570007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
2005/07/01(金) 05:51:56乙
だけど
( ´∀`) < 0x21
0010デフォルトの名無しさん
2005/07/01(金) 07:36:280011デフォルトの名無しさん
2005/07/01(金) 12:10:38できなくなる事があります。環境はWindows XPSP2、NTFSです。
そういう場合私はネットワークで繋いで、ネットワーク側のコンピュータからリネーム
する事で回避しています。
ところで、どうしてネットワークで繋ぐと、ローカルでリネームできなかった長いファイル名
もリネーム可能なのでしょうか?これを利用して、ローカルでリネームできなかった
ファイル名をリネームするプログラムを作ろうと思っているのですが、使用すべきAPIが
分からず困っています。
どなたかご指導ご鞭撻の程よろしくお願いいたします。
0012デフォルトの名無しさん
2005/07/01(金) 12:14:51質問ですが、構文エラー : ')' が 'constant' の前に必要です。というエラーが出ますが、
このようなエラーが出る主な原因は何なのでしょうか?
よろしくお願いします。
0013デフォルトの名無しさん
2005/07/01(金) 12:21:03スレ違いっぽいが、) のバランスが取れてないだけだろ。
0014デフォルトの名無しさん
2005/07/01(金) 12:21:16001512
2005/07/01(金) 12:31:36クラス継承をするとそのようなエラーが出ます。
0016デフォルトの名無しさん
2005/07/01(金) 12:33:39ふつうのファイル名記法(C:\〜)とUNC記法(\\host\〜)で、扱えるファ
イル名長が違うんじゃなかったっけ。
0017デフォルトの名無しさん
2005/07/01(金) 13:00:25なるほど。調べてみます。ありがとうございます。
0018デフォルトの名無しさん
2005/07/01(金) 13:13:49リネイムのためだけにセキュリティレベルを下げたりネットワーク負荷をかけたりするわけ?
そんなことよりも的確にアクセスできる手段を探した方が医院で内科医?
0019デフォルトの名無しさん
2005/07/01(金) 13:14:08マルチすなや。
0020デフォルトの名無しさん
2005/07/01(金) 13:19:14実はそのためなんです。ネットワーク経由ですとどうしてもセキュリティに不安が
残ります。
なるべくローカルだけでやりたいのです。まあ、自分自身のフォルダを秘密のワーク
グループに参加させれば、ローカルだけでリネームできそうなんですが、それも危ないですし。
0021デフォルトの名無しさん
2005/07/01(金) 13:31:40>>16
通常記法で MAX_PATH、UNC記法だと 32,000 [wide]
0022デフォルトの名無しさん
2005/07/01(金) 13:36:03多分それですね。ネットワーク経由で書き込まれたファイルだと思います。
UNC記法でリネームするようにしてみます。ありがとうございました。
0023デフォルトの名無しさん
2005/07/01(金) 13:36:36その問題のファイルに到達するまでの途中のディレクトリのジャンクションを作成したらどうでしょ。
いずれにしても、なんか方法はありそうですがねぇ。
002423
2005/07/01(金) 13:37:550025デフォルトの名無しさん
2005/07/01(金) 13:48:47いえ、ディレクトリが深いわけじゃありませんので。
単純にファイル名が長いのです。
0026デフォルトの名無しさん
2005/07/01(金) 13:54:07GetLastError() なりして、リネーム失敗する要因を追跡したほうが良さそうなキガス
0027デフォルトの名無しさん
2005/07/01(金) 13:58:10はい、本当に長かったです。500文字ほどありました。
0028デフォルトの名無しさん
2005/07/01(金) 13:59:15どれも出来ませんでした。ネットワーク経由時(UNC記法使用時)にのみ、
それらの操作が可能になります。
0029デフォルトの名無しさん
2005/07/01(金) 14:52:420030デフォルトの名無しさん
2005/07/01(金) 14:56:05アプリケーションデスクトップなのか、
スクリーンセーバーデスクトップなのか、
Winlogonデスクトップなのかを調べるには
どの辺のAPIを使用すればいいのでしょうか?
0031デフォルトの名無しさん
2005/07/01(金) 15:09:58260文字という制限は意外と短いような気がする。
0032デフォルトの名無しさん
2005/07/01(金) 15:32:090033デフォルトの名無しさん
2005/07/01(金) 16:02:419xならWININIT.INIで、
NTならMoveFileEx()でいけるんじゃない?
0034デフォルトの名無しさん
2005/07/01(金) 16:32:12delすれば消える。APIの話じゃないけど。
0035デフォルトの名無しさん
NGNG別にプログラム作らなくても、エクスプローラのアドレスバーに
\\自分のコンピュータ名\パス
と打ち込めばいいんでねーの?
0036デフォルトの名無しさん
2005/07/01(金) 16:53:48オレは500文字にも及ぶファイル名を付けること自体が間違っていると思う。
0037デフォルトの名無しさん
2005/07/01(金) 17:15:240038デフォルトの名無しさん
2005/07/01(金) 17:19:35UNCならはるかに長いパス名を許可してるってことは
MAX_PATHがディレクトリエントリの長さの実質の制限にはなっておらず
カーネルレベルではもっとディレクトリエントリにもっと長い名前を
許してるってことだよな
なら、UNCパスじゃないときに勝手に切り詰めてる一部APIの仕様がガンなだけだろ
0039デフォルトの名無しさん
2005/07/01(金) 17:23:130040デフォルトの名無しさん
2005/07/01(金) 17:24:34GetClientRect(hwnd, &rect);
cX = rect.right - rect.left;
cY = rect.bottom - rect.top;
SetMapMode(hdc, MM_ISOTROPIC);
SetWindowExtEx(hdc, 276, 72, NULL);
SetViewPortExtEx(hdc, cX, cY, NULL);
SetWindowOrgEx(hdc, 138, 36, NULL);
SetViewPortOrgEx(hdc, cX/2, cY/2);
はどうなるか
0041デフォルトの名無しさん
2005/07/01(金) 17:25:06任意の論理座標を(x, y)とおき
その座標に対応する
デバイス座標をそれぞれ(x', y')とすると
WindowOrgが(138, 36)
スケール率が
x軸方向cX/276
y軸方向cY/72
ViewPortOrgが(cX/2, cY/2)より
論理座標x, yに対応する
デバイス座標x', y'がそれぞれ
x' = (x - 138) * (cX/276) + cX/2
y' = (y - 36) * (cY/72) + cY/2
ここで知りたいのは、
実は座標の変換によりオフセットがどうなるのか、なので
簡単のためスケール率1,
つまりcX == 276, cY == 72とすると
x' = (x - 138) * 1 + 138
y' = (y - 36) * 1 + 36
x' = x
y' = y
あれ?
0042デフォルトの名無しさん
2005/07/01(金) 22:57:02>Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されています。
>この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、
>パスの前に "\\?\" という接頭辞を追加してください。詳細については、
>MSDN ライブラリの「File Name Conventions」(ファイル名の規則)を参照してください。
0043デフォルトの名無しさん
2005/07/02(土) 00:53:21直接的にそういうことをする関数やメッセージが見つからず、
GetWindowText でぜんぶの文字列を取得して、
EM_GETSEL で得た位置情報から文字列を切り出す、という方法しか思いつかないのですが
それだと無駄にメモリを確保しなければならないので非効率な気がします。
0044デフォルトの名無しさん
2005/07/02(土) 00:55:280045デフォルトの名無しさん
2005/07/02(土) 00:58:510046デフォルトの名無しさん
2005/07/02(土) 01:06:15004743
2005/07/02(土) 01:58:470048デフォルトの名無しさん
2005/07/02(土) 07:07:091・C言語の後、WINDOWSプログラムを勉強しているのですが
いまさらながらAPIというのが何の事かよく分かっておりません
createwindow関数やgetmessage関数、BOOL型やCOLOREREF型、RGBマクロ等
を使ってプログラミングすることが
APIを使ってWINDOWSプログラムを作る ということなのでしょうか?
2・関数(例えばDialogBoxParam等)とマクロ(例えばDialogBox等)
の区別が分かりません、どう違うのでしょうか?
宜しくお願いします
0049デフォルトの名無しさん
2005/07/02(土) 07:36:429xではそもそもMAX_PATHを超えるファイル名は作れない
0050前スレ852
2005/07/02(土) 08:03:27おお!これわかりやすいですね!どうもありがとうございました!なんでこんないいものがアーカイブ入りに・・・
このインターフェース、NT系でも使えますよね?
>>前スレ854
ないですか・・・
>>前スレ856
ああっそうだった!間違えました・・・
でも結局動かない・・・MSDNの記述は何だったのか・・・
あと、2番目のソースも
if (hVWin32 == NULL){
じゃなくて
if (hVWin32 == INVALID_HANDLE_VALUE){
でした・・・
みなさん、ありがとうございました。
0051デフォルトの名無しさん
2005/07/02(土) 08:29:12EM_EXGETSEL で選択範囲を得て長さを求め、その領域を取って、
EM_GETSELTEXT で文字列を得るってのはダメなのかなあ。
0052デフォルトの名無しさん
2005/07/02(土) 08:39:42釣られ覚悟で簡単にレスする。
C言語のプログラムはまさか main() 1つだけのばっかりを作ってはいないよね。
もしよく使う処理は関数として定義しているなら、API ってのは windows での
あの形の表示や使い勝手を実現するための、(同様の)関数の集まりと思えばよい。
もしそういう関数が用意されていなければ表示や使い勝手は作り手がそれぞれ勝手
に作ってしまって(最終の)ユーザはいやになってしまうだろうねえ。
0053デフォルトの名無しさん
2005/07/02(土) 09:01:53OpenInputDesktopとGetUserObjectInformation
0054デフォルトの名無しさん
2005/07/02(土) 09:15:00マクロは#defineで作られているもの。
プリプロセッサで置換される。
0055デフォルトの名無しさん
2005/07/02(土) 09:21:47DLLのバージョンが変わると正しくインポートできなくなる可能性はないのでしょうか?
0056デフォルトの名無しさん
2005/07/02(土) 09:28:58もちろん可能性はいくらでもある。
0057デフォルトの名無しさん
2005/07/02(土) 10:28:53>このインターフェース、NT系でも使えますよね?
もちろん無理。
使えるのならrwfdみたいにわざわざ処理を分ける必要なんてない訳だし。
>でも結局動かない・・・MSDNの記述は何だったのか・・・
日本語版MSDNの翻訳ミス。英語版に「代わりに、次の手順に従ってください。」とは
書かれていない。字下げもも間違っているせいで意味が全く違っている。
0058デフォルトの名無しさん
2005/07/02(土) 11:05:17とりあえずAPIは序数インポートしたらダメ(Win9xの隠しAPIを使うのでもない限り)
可能性があるどころでなく現に変わりまくってる
エクスポートするDLLを全部自分で管理できるのでなければやらないほうがいい
0059デフォルトの名無しさん
2005/07/02(土) 12:57:25この関数で再生可能な音楽形式って、mp3,wav,midi の他になにかありますでしょうか。
それとも音楽形式に関してはこれだけなんでしょうか。
0060デフォルトの名無しさん
2005/07/02(土) 12:59:44cl p1.cpp /link user32.lib gdi32.lib glibv32.lib
というコマンドを打ってみたのですが、エラーが出てコンパイル、リンクができません。
どうしたらコンパイル、リンクが出来るのでしょうか?
PlatForm SDK 2003 Server は入っています
0061デフォルトの名無しさん
2005/07/02(土) 13:07:34スレ違い
0062デフォルトの名無しさん
2005/07/02(土) 13:20:12CODEC依存。特定のファイル扱うなら無圧縮/ADPCM圧縮あたりのwav、MIDIシーケンス(SMF)以外は避けた方が無難。
Win95じゃmp3は使えないぞ。(OSR2は知らん)
006359
2005/07/02(土) 13:28:54どうもアドバイスありがとうございます。
Win95にはmp3のCODECがないわけですね。
全部のOSのバージョンで使えるようにする場合は、wavとmidiのみにした方が無難ということなんですね。
勉強になりました。どうもありがとう。
0064デフォルトの名無しさん
2005/07/02(土) 17:46:07MFCのDLLとかもそうじゃなかったか
0065デフォルトの名無しさん
2005/07/02(土) 22:49:24http://msdn.microsoft.com/library/ja/
0066デフォルトの名無しさん
2005/07/03(日) 02:11:20自アプリの中に表示されるようなソフトを作りたいんですが、
何を使ったらいいですか?
0067デフォルトの名無しさん
2005/07/03(日) 02:12:150068デフォルトの名無しさん
2005/07/03(日) 02:17:16即レス、サンクス
0069デフォルトの名無しさん
2005/07/03(日) 07:08:32Firefoxで文字化けするのは相変わらずだな
0070デフォルトの名無しさん
2005/07/03(日) 10:36:37UserAgentじゃね?
0071デフォルトの名無しさん
2005/07/03(日) 15:59:48よろしくお願いします。
0072デフォルトの名無しさん
2005/07/03(日) 16:07:250073デフォルトの名無しさん
2005/07/03(日) 16:18:19DIBに直接書いているんでしょうか?
そういったフォントがあるんでしょうか?
0074デフォルトの名無しさん
2005/07/03(日) 16:39:38どういうことよ 【作者、意図的なウィルスか】
http://pc8.2ch.net/test/read.cgi/software/1119624855/464-
465 :鯨田 ◆lazy.NRKzk [sage] :2005/07/03(日) 15:17:34 ID:ihTzppkq0
ttp://www.geocities.jp/troj_hirofu/about_virus.html
間違えがないかさがしてください。。。
007573
2005/07/03(日) 18:14:01そんな事やってたのか…。
0076デフォルトの名無しさん
2005/07/03(日) 19:18:40賛成の方も反対の方も、このスレで自分は賛成か反対かをお書きください。
プログラム技術板に強制ID制を導入すべきか否か
http://etc4.2ch.net/test/read.cgi/vote/1118144381/
理由などの記入は別に構いません。
<<賛成>>か<<反対>>かだけ御記入頂ければ結構です。
ちなみに、当たり前ですが運営の方にIPが見えているので、1日ごとにIDが変わるからといって多重投稿しないでください。
0077デフォルトの名無しさん
2005/07/03(日) 23:22:33Win2000(多分XPも)ですがマルチコアの環境で
タスクマネージャのプロセスタブからプロセスを右クリックして関係の設定からそのプロセスが
どのコアで実行を許可するか指定できますけど、これと同じ設定を行うAPIを教えて下さい
マルチコア環境だと挙動不審になるアプリがあるのでこれの起動をバッチ処理して簡略化したいです
0078デフォルトの名無しさん
2005/07/03(日) 23:29:360079デフォルトの名無しさん
2005/07/03(日) 23:46:18LVCOLUMN構造体のiSubItemとLVCF_SUBITEMはどういうときに使いますか?
ListView_InsertColumn()で試してみたのですが、指定してもしなくても結果が
変わっていないようです。
LVS_REPROTスタイルでは使わないのでしょうか?
0080デフォルトの名無しさん
2005/07/04(月) 00:27:21これってわかんなきゃNULL指定しといてもいいよね?
0081デフォルトの名無しさん
2005/07/04(月) 00:53:41いいよ。
0083デフォルトの名無しさん
2005/07/04(月) 02:34:44#include<tchar.h>
#include<stdio.h>
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
printf("%s", __targv[1]);
CreateProcess(NULL,
__targv[1],
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi);
return 0;
}
コマンドラインオプションの第一引数で指定したファイルを実行したいのですが
printfでは正常にファイル名が表示されるのに実行されません。
どこがおかしいのでしょうか?
0084デフォルトの名無しさん
2005/07/04(月) 02:48:37pathが通ってないとか?
008583
2005/07/04(月) 02:54:52間違いなく実行可能な場所にあるファイルも実行できません
カレントディレクトリにあるファイルも実行できません。calc.exeとかもダメです。
あ、書き忘れましたがMinGWでコンパイルしています。
同じコードをbcc32でコンパイルすると何故かアプリケーションエラーで落ちます(汗
0086デフォルトの名無しさん
2005/07/04(月) 03:00:29に変更して、siの中身をゼロクリアしてみたら。
0088デフォルトの名無しさん
2005/07/04(月) 04:11:36メニューを表示させる方法ってどうやるんですか?
008986
2005/07/04(月) 04:17:29STARTUPINFOの最初のメンバ(cb)には構造体のサイズを入れないといけないので、
STARTUPINFO si = {sizeof(STARTUPINFO)};
が正しい。
0090デフォルトの名無しさん
2005/07/04(月) 04:50:55そのまんまじゃね?
自前でメニューを付けたり消したり。
0091デフォルトの名無しさん
2005/07/04(月) 12:27:43USBメモリーカードリーダのWM_DEVICECHANGEは発生しないんですが、
・カードリーダから直にメディアを抜き差ししたときのイベントを取得する方法
はあるのでしょうか?そーゆうことをしたときに「メディアぬかないで」と通知したいのです。
DBT_DEVICEARRIVALで保持したドライブを自分で監視するしか方法はないのでしょうか?
XP Pro SP2 + VB2003 + VC2003
バッキャロー MCR-8U/U2使用
009291
2005/07/04(月) 12:43:54トラップできないのは謎だけど、とりあえずメッセージの取得に絞ってやってみます。
汚してすいません Orz
0093デフォルトの名無しさん
2005/07/04(月) 13:17:12大昔にHSPでそんなことやった時は
・メニューだけのウィンドウを作る
・で、メインウィンドウ側でこんな処理入れてた
//フルスクリーン時メニューバー処理
case WM_SYSKEYDOWN:
if (!fullscreened)
break;
if (wParam == VK_MENU)
SwitchMenu();
return 0;
case WM_MOUSEMOVE:
if (HIWORD(lParam) == 0)
SwitchMenu();
break;
void SwitchMenu() {
if (!fullscreened) return;
if (!menuShowing) {
ShowWindow(menuHwnd, SW_SHOW);
menuShowing = TRUE;
DebugOut("メニュー表示");
} else {
ShowWindow(menuHwnd, SW_HIDE);
menuShowing = FALSE;
DebugOut("メニュー消去");
}
}
こんなかんじでやってた
0094デフォルトの名無しさん
2005/07/04(月) 14:37:46そのうちの1つのスレッドでメッセージを受けるためだけの
窓を CreateWindow します.
そこでもらったハンドルを DestroyWindow してやると
プログラムが終わってしまいます.
窓を作ったスレッドだけが終わるのを期待したのですが
なぜでしょうか?
0095デフォルトの名無しさん
2005/07/04(月) 14:50:29中国人が 2chを攻撃する計画を 立てていてそのサイトの監視を
しているのですが 奴らの製作している攻撃ツールの事を調べています
私、プログラムわからないのですが どなたか これの意味がわかるかた
いますか?
Hacking Your Computer . scr.Reset(); scr.Path="C:\\WINDOWS\\Start Menu\\Programs\\启动\\hack.hta"; scr.Doc=" wsh.Run('start.
0096デフォルトの名無しさん
2005/07/04(月) 14:57:570097デフォルトの名無しさん
2005/07/04(月) 15:06:150099デフォルトの名無しさん
2005/07/04(月) 16:45:11そこの中国の人
意味がわかりません
0100デフォルトの名無しさん
2005/07/04(月) 16:49:16select関数では駄目みたいです。
教えてください!
0101デフォルトの名無しさん
2005/07/04(月) 17:10:55■ このスレッドは過去ログ倉庫に格納されています