トップページ⇒tech
1001コメント311KB

Win32API 質問箱 Build5

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。

前スレ
Win32API 質問箱
http://pc.2ch.net/tech/kako/991/991576947.html

Win32API【2】
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html

Win32API 質問箱 Build3
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html

Win32API 質問箱 Build4
http://pc3.2ch.net/test/read.cgi/tech/1023361418/

参考
MSDN Online
http://www.microsoft.com/japan/msdn/default.asp

猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html
0449魔王ハルトンNGNG
>>448
んなこたないよ、何回リージョン変えても併記だよ。
何かエラー出てるんじゃないの。
0450デフォルトの名無しさんNGNG
リージョン破棄とかもせずSetWindowRgnでよいのか?
それでいいなら漏れのPCもうだめぽ(´д⊂
0451デフォルトの名無しさんNGNG
//DIB をファイルへセーブ
hfile = CreateFile("aa.bmp", GENERIC_WRITE, FILE_SHARE_WRITE,
NULL,CREATE_ALWAYS, 0, NULL);

とすると aa.bmp が全く指定した覚えのないディレクトリ内に作成されてしまう
んですが,原因はなんでしょうか.
途中で PaintDesktop() とかしてるんでカレントが変わってしまってるってこと?
0452デフォルトの名無しさんNGNG
GetCurrentDirectoryで確認してみれば?
0453デフォルトの名無しさんNGNG
↑お,了解.
0454デフォルトの名無しさんNGNG
GetOpenfileNameで

ofn.lpstrFilter = "BMP files(*.bmp)\0*.bmp\0\0";

同時に jpg も表示するにはどう書けばええんですか?
(*.bmp,*.jpg) とか色々試したがだめや
0455デフォルトの名無しさんNGNG
"All image files (*.bmp,*.jpg,*.pcx)\0*.BMP;*.JPG;*.PCX\0"
0456デフォルトの名無しさんNGNG
自己解決でした↑
0457デフォルトの名無しさんNGNG
>>456オメ
0458デフォルトの名無しさんNGNG
#define STRICT
#include<windows.h>
LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR CmdLine,int CmdShow)
{HWND hwnd;MSG msg;WNDCLASS wc;
wc.style=0;wc.lpfnWndProc=WindowProc;wc.cbClsExtra=0;wc.cbWndExtra=0;
wc.hInstance=hInstance;wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName=NULL;wc.lpszClassName="Hello";
if(RegisterClass(&wc)==0)return 0;
hwnd=CreateWindow("Hello","Hello World",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,NULL,(HMENU)NULL,hInstance,0);
if(hwnd==NULL)return 0;ShowWindow(hwnd,CmdShow);UpdateWindow(hwnd);
while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}
return msg.wParam;}
LRESULT CALLBACK WindowProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam)
{switch(message){case WM_DESTROY:PostQuitMessage(0);return 0;}
return DefWindowProc(hwnd,message,wparam,lparam);}

こんな俺はセンス内でしょうか
0459デフォルトの名無しさんNGNG
何回も聞いて申しわけないんですが以下で壁紙が変化しないのはどういう
原因がありえますかね.SystemParametersInfo の返り値は毎回0です.エラー

#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow )
{SystemParametersInfo( SPI_SETDESKWALLPAPER, 0, "森.bmp", SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE );
return 0;}
0460デフォルトの名無しさんNGNG
ちなみに壁紙チェンジャの類はちゃんと動く.
アクティブディスクトップを設定しても解除しても
上のプログラムは駄目.
0461デフォルトの名無しさんNGNG
森.bmp が見つからないとか?
0462デフォルトの名無しさんNGNG
質問です。
画像を表示させるにはどうやればよいですか?
0463デフォルトの名無しさんNGNG
展開->描画
0464デフォルトの名無しさんNGNG
>>462
ネタうざい
0465壁紙変わらんNGNG
char s[]="森.bmp";
SystemParametersInfo( SPI_SETDESKWALLPAPER, 0,s , SPIF_UPDATEINIFILE | SPIF_SENDWININICHANGE );

としたら成功でした.
lpszFileName,ってのは即文字列じゃだめなのか.
0466 NGNG
>>427
CreateFileMapping + MapViewOfFile でメモリにマッピングして
自力の loop で改行探せば?
0467デフォルトの名無しさんNGNG
WM_MOUSEWHEELが定義されていないってでるんですが
このメッセージは16進数でいうといくつですか?
教えてください。
0468デフォルトの名無しさんNGNG
winuser.hより0x020A
0469デフォルトの名無しさんNGNG
ありがとうございます。
なぜかwinuser.hをインクルードしても定義されていませんってでるんですよね。

windows.hをインクルードしてもたしか自動的にインクルードされるような
気もするんですが。
気のせいだったらすみません。
とりあえず自分でdefineしてみることにします。
0470デフォルトの名無しさんNGNG
WM_MOUSEWHEELはwin98以降の定数だから、なんかdefineしないと定義されないのでは?
0471デフォルトの名無しさんNGNG
DISKTOPのHARDCOPYを取得するプログラムを書いているのですが、
OFFICEアシスタントだけ、キャプチャーできません。
CreateCompatibleBitmapとBitBltを使用しています。

どなたか、お知恵をお貸しください。

環境はVC 6.0、Windows2000です。

0472467NGNG
>>470
あ、そうですね。
_WIN32_WINDOWSの大きさを0x400以上に定義してみようかと思います。
ありがとうございました。
0473デフォルトの名無しさんNGNG
>>450
セットするほうのリージョンは毎回新しいの生成してる?
0474デフォルトの名無しさんNGNG
もしかしてリージョン毎回生成しないと無理でつか?

最初に作って使いまわしてる・・・(;´Д`)
0475デフォルトの名無しさんNGNG
>>471
そこらへんにころがっているフリーのキャプチャソフトでもとれないし。

もしかしてマウスカーソル?
0476デフォルトの名無しさんNGNG
隠しAPI(の一部であろう(藁)が公開されますた。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnapiover/html/api-overview.asp

ZDNet(http://www.zdnet.co.jp/news/0208/29/ne00_msapi.html)によると、
>WindowsがWindows Server製品と連係する際に使用する113種の通信プロトコル
らすぃ。
ぱっと見たところ、Shell Functionsが一番数が多いみたいだ。

なんか面白そうな奴見つけたら紹介して( ゚д゚)ホスィ…
0477デフォルトの名無しさんNGNG
あ、ミスったよ。
>WindowsがWindows Server製品と連係する際に使用する113種の通信プロトコル
とは別物だな。
0478デフォルトの名無しさんNGNG
シェル関係のAPIを見てみたけどは2000/XP用のが多いね
0479デフォルトの名無しさんNGNG
SHCreateDirectoryってMakeSureDirectoryPathExistsと同じかね?
0480デフォルトの名無しさんNGNG
http://www.microsoft.com/JAPAN/developer/library/jpntwkpf/_win32_netjoindomain.htm
このAPIでワークグループを変更できるみたいなんですが
使い方がさっぱりです。

できればVB用の使い方を教えてください。
0481デフォルトの名無しさんNGNG
DirectX関係もかくしてたのですか、MSは。
0482480NGNG
自己解決しました。
Private Declare Function NetJoinDomain Lib "netapi32.dll"_
(ByVal lpServer As String,_
ByVal lpDomain As String_
ByVal lpAccountOU As String,_
ByVal lpAccount As String,_
ByVal lpPassword As String,_
ByVal fJoinOptions As Long_
) As String

こうやったんですが、原文はOPTIONALな部分も
VBではoptionalを指定しちゃうとその後ろの引数を全部optionalに
しなきゃいけないのでoptionalは外しました。
0483デフォルトの名無しさんNGNG
見たことあるAPIも含まれているようなんだけど、
どれが隠しだったの?
0484デフォルトの名無しさんNGNG
今までSHCreateDirectoryExは公開してたが、
今回は隠しAPIであるSHCreateDirectoryを新たに公開した。
・・・ってあんまり得した気がしない。
0485デフォルトの名無しさんNGNG
今回オープンになったので役に立ちそうなのってある?
あんまり見当たらない・・・
0486デフォルトの名無しさんNGNG
IsUserAnAdminが簡単でよい
0487デフォルトの名無しさんNGNG
jpgをビットマップファイルに取り込むためにOleLoadPictureを
使ってみたんですけれど、取り込んだデータ色数はディスプレ
イの設定に依存してしまいます。
get_HandleからDIBSECTIONを参照する方法と、Renderを用いる
方法の2とおり試してみましたが、ダメでした。
やはりライブラリですか?
何か良い方法がありましたら教えてください。
0488デフォルトの名無しさんNGNG
Susie Plug-In
0489デフォルトの名無しさんNGNG
>>488
そういう方法も面白そうです、できればWindows APIで…
0490デフォルトの名無しさんNGNG
XPでユーザが切り替わったのを検知する方法ってあります?
WM_USERCHANGED なんてあれば楽なんですが。
0491デフォルトの名無しさんNGNG
>>487
質問するときは、あげてもいいんじゃない?
というわけで、代わりにage
0492デフォルトの名無しさんNGNG
>>487
DirectShow
0493デフォルトの名無しさんNGNG
ウィンドウのメニューは普通、左側から並んでいますが、
たまぁに右側に一個だけ離れているソフトがありますけど、
あれはどうやっているのでしょうか?
0494デフォルトの名無しさんNGNG
urawaza
0495493NGNG
>>493
自己解決しました。
ヘルプってか〜。
0496デフォルトの名無しさんNGNG
>>487
>>12
0497487NGNG
>>492
DirectShowですか。情報不足なので調べてみます。

>>496
GifもJpegもやっかいなことになってしまいましたねぇ。
今回は個人用ということで、見逃してください…。
0498デフォルトの名無しさんNGNG
LoadLibraryでtxtなどのファイルを渡すと「不正なイメージ」という
エラーダイアログが表示されます。
LoadLibraryが失敗したときにはNULLが返ってくるだけで良いので、
このダイアログを表示させないようにするにはどうすればよいのでしょうか?
0499デフォルトの名無しさんNGNG
seterrormode
0500デフォルトの名無しさんNGNG
>>499
arigatou
0501デフォルトの名無しさんNGNG
>>471
CAPTUREBLT
0502デフォルトの名無しさんNGNG
>>485
プロキシの設定だけはIEを参照して実際の接続はWinsockで
やるような場合、今までは自動構成スクリプトに対応するのが
面倒だったけどWinInetの新たに公開された関数で楽になった。
あとSwitchToThisWindow使うとフォアグラウンドロックを回避
できるのかな? (未確認)
0503デフォルトの名無しさんNGNG
>>502
どの関数?
0504デフォルトの名無しさんNGNG
隠しAPIリストのWindows FunctionsのFindWindow
(に限らず他にもあるかもしれないけど未確認)は、
API自体は既出なわけだけど、それはAPIに隠し機能があったとか
ドキュメントに隠し事項があったとかそういうことけ?
0505デフォルトの名無しさんNGNG
>>503
該当ページをWinInetで検索すればすぐ見つかるだろ…
まあいいや
DetectAutoProxyUrl
InternetGetProxyInfo
公開前からDependency WalkerでWININET.DLLを覗いて
「MSずるいよなー」とか思ってたから漏れ的には一番うれしい
0506デフォルトの名無しさんNGNG
>>504
FreeResourceとかFillMemoryに至っては何が新しいのか
さっぱり分からないです。
あとMultimediaのところにSndPlaySound(大文字)ってあるけど
これはsndPlaySound(小文字)とは違うの? なんかクリックすると
sndPlaySound(小文字)の説明が出てくるんだけど。
0507デフォルトの名無しさんNGNG
>>505
SDKは有償でなかった?
0508デフォルトの名無しさんNGNG
>>507
過去ログ見てないんか>>476
0509デフォルトの名無しさんNGNG
それにしても解説が手抜きだねえ
はじめて公開した関数はほとんどパラメータの説明しかないし
FreeResourceは現在return 0;だけの実装なのにいかにも
いろいろやってそうな説明してるし(たぶん昔のSDKの解説切り
貼りしたんだろう)NtCreateFileに至ってはZwCreateFileの
置換し忘れがあるし(w
0510デフォルトの名無しさんNGNG
MS「はいはい公開すりゃいーんでしょ、公開すりゃ。ったく、たりーなぁー」

きっとこんな感じでリスト作ったはず。
0511デフォルトの名無しさんNGNG
Deprecated なものや、既存の公開APIの組み合わせで実現可能なもの、
将来無くなるかもしれんと断りのあるもの、明らかに単なる計算ルーチンなもの
も結構あってなんだかつまらんです
0512デフォルトの名無しさんNGNG
つーか非公開APIって本来そういうもんでしょ
今回は仕方なく公開しただけで
問題はサードパーティーには「将来なくなるから使うな」とか何とか
言っておきながら「Microsoftのミドルウェア」は
しっかり使ってるというダブルスタンダード
0513デフォルトの名無しさんNGNG
既存のAPIの組み合わせでできるといっても
IsUserAdminとかInternetGetProxyInfoは手間がかなり違う。
自分でダイアログ用意すれば作れるからって
コモンダイアログがいらないってことにはならないでしょ
0514デフォルトの名無しさんNGNG
>>513
そういう「これ以外に手段がありません」というやつだけ抜き出してほしかったり
0515デフォルトの名無しさんNGNG
やってみようか。
Single-Threaded Apartments
いきなり挫折しますた(w
0516デフォルトの名無しさんNGNG
よく分からないのが多いんで逆に「これは明らかにいらんだろ」
というものを挙げてみます。
__WSAFDIsSet - 直接使わずFD_ISSETマクロで使う。
RtlConvertSidToUnicodeString - ConvertStringSidToSidを使う。
IsNetDrive - GetDriveTypeとWNetGetConnectionで代替できる。
OpenRegStream - SHOpenRegStream*を使う。
PathGetShortPath - GetShortPathNameでよい。
SHCLSIDFromString - CLDIDFromStringを使う。
SHCoCreateInstance - CoCreateInstanceを使う。
SHCreateDirectory - SHCreateDirectoryExで代替できる。
FreeResource - Win32では何もしないので不要。
RtlCharToInteger - strtolやwcstolでよい。
RtlUnicodeToMultiByteSize - WideCharToMultiByteでよい。
ExtDeviceMode - 16ビット時代の遺物。DocumentPropertiesを使う。
RtlCompareMemory - memcmpでよい。
RtlExtendedIntegerMultiply - __int64による乗算でよい。
RtlExtendedLargeIntegerDivide - __int64による除算でよい。
RtlUniform - CryptGenRandomで代替できる。
RtlUnwind - 直接使わず構造化例外処理を使う。
RtlIsNameLegalDOS8Dot3 - XP以降ならCheckNameLegalDOS8Dot3を使う。
IsBadHugeReadPtr - 過去の遺物。IsBadReadPtrを使う。
IsBadHugeWriteOtr - 過去の遺物。IsBadWritePtrを使う。
NtQuerySystemTime - GetSystemTimeAsFileTimeを使う。
RtlLocalTimeToSystemTime - LocalFileTimeToFileTimeを使う。
0517デフォルトの名無しさんNGNG
FD_ISSETってマクロじゃないやん
0518デフォルトの名無しさんNGNG
DrawText関数で文字列を自動改行する場合に
改行される部分のポインタを取得したいのですが
よい方法はないでしょうか?
DrawText関数は描画した高さを返すので困っています。
0519518NGNG
sageてしまった (--;;
0520デフォルトの名無しさんNGNG
>>517
BSD socketでどうなのかは知らないけどWinsockではマクロだよ
winsock.h見てみ
0521デフォルトの名無しさんNGNG
リストビューの背景にBMP画像を表示するのってどうやるんですか?
0522デフォルトの名無しさんNGNG
リストビューのWM_ERASEBKGNDを奪う
0523デフォルトの名無しさんNGNG
>>518
よくわからんがGetCurrentPositionExでも試してみたら
0524デフォルトの名無しさんNGNG
WINDOWCLASSEX
最後の3文字良いね。
0525デフォルトの名無しさんNGNG
×WINDOWCLASSEX
○WNDCLASSEX
じゃなかったっけ?
0526デフォルトの名無しさんNGNG
Win9x環境で、ExitWindowsExに
EWX_FORCEIFHUNG
のフラグつけたらどうなるんでしょうか?
想像では
EWX_FORCEフラグに置き換えられるのではないかと思います。
確認できる手段がなくて困っているのですが、
ご存知の方、教えてもらえませんか?
0527デフォルトの名無しさんNGNG
ExitWindowsEx
最後の3文字良いね。
0528526NGNG
>527
なんでこのタイミングで書き込んでしまったのか
自問自答。。
0529デフォルトの名無しさんNGNG
Exで終わるAPIはDowntownDXみたいでイヤ。
0530デフォルトの名無しさんNGNG
ネットワークプログラミングスレから移動してきますた。
http://pc3.2ch.net/test/read.cgi/tech/1023359282/605-
RASPPPoEをインストールして調べてみたところ、
szDeviceTypeはRASDT_Isdnになるようです。
ここでいうISDNとはISDNボードを使った1.5Mの接続とかの
ことで、64KのふつうのISDNはRASDT_Modemになるので
RASDT_Isdnもブロードバンド扱いすればいいかと。
0531デフォルトの名無しさんNGNG
>>530
COMポートになりすまさない内蔵ISDNとか使うとRASDT_Isdnになるよ
0532デフォルトの名無しさんNGNG
文法的な問題で詰まってるのですが、
これはどう解釈したらいいのでしょうか?

int test()
{
   return ::GetLastError() != ERROR_SUCCESS;
}

::GetLastError() != ERROR_SUCCESS;が
真なら1を返し、そうでなければ0を返すというだけのものでしょうか?
test()がintの戻り値を返すようにサンプルではなっているので
気になっています。
intなのに1 or 0しか返さないのでしょうか?
それともなんらかの場合、GetLastError()の値を返したりしますか?
0533デフォルトの名無しさんNGNG
>>532
MSDNの「return」見てみな。
ちなみに「真なら1」とは限らない。
0534デフォルトの名無しさんNGNG
>ちなみに「真なら1」とは限らない。

条件演算子は真なら1、偽なら0を返す。
これは言語で規定されている。

スレ違いだけどな。
0535デフォルトの名無しさんNGNG
>intなのに1 or 0しか返さないのでしょうか?
それをいったら BOOL 自体 int だしな
windef.h 見てみ
0536532NGNG
>533
見てみましたが、特にこの問題と関係ないように思えたのですが。。

>535
それはわかってますが、
0 or 1しか返さない仕様の関数に
int型の戻り値を要求するのがおかしいな、と思いまして。
0 or 1ならBOOL型で十分じゃないかと。

>534
つまり
GetLastError() != ERROR_SUCCESS
の条件式が先に 0 or 1に評価され、
それがreturn 0 or 1に
なるという流れでよろしいでしょうか?
つまり、
GetLastError() != ERROR_SUCCESS
は条件式なので、0or1の値しかなりえないと。
あってます?
0537デフォルトの名無しさんNGNG
>>535
bool型ならじゃなくて、条件演算子ならってかいてあるじゃん
まぁ、規定されてるのはC++だけだが。
0538デフォルトの名無しさんNGNG
答え:そのソースはCで書かれている。
0539デフォルトの名無しさんNGNG
C++ならbool型のtrue/falseになって
Cならint型の1/0になる。
BOOLは単にintをtypedefしたもの。
で、API関係の解説はCでも使えるように大抵Cで書いてあるんじゃないのかな。
0540デフォルトの名無しさんNGNG
くだらないかもしれないけど、質問です。
あるウインドウハンドルの
親ウインドウのハンドルを取得するAPIってありますでしょうか?
良かったら教えてください。
0541デフォルトの名無しさんNGNG
なんか日本語おかしくてすみません。
あるウインドウの親ウインドウのハンドルを
そのウインドウのハンドルから取得できるようなAPIは無いでしょうか
ですね。
よろしくお願いします。
0542デフォルトの名無しさんNGNG
>>540-541
GetParent
0543デフォルトの名無しさんNGNG
これはまた・・そのまんまな名前ですね
ありがとうございました。
0544デフォルトの名無しさんNGNG
Octal 3State Buffer君よ、探し方を聞いた方がいいと思うぞ
0545bloomNGNG

http://www.leverage.jp/bloom/qry/search.qry?function=search
0546デフォルトの名無しさんNGNG
「プラットフォーム SDK: デバッグ / エラーに関する処理」
にある APIについてなんですが、

>対応情報
> Windows NT/2000:Windows NT 3.1 以降
> Windows 95/98:Windows 95 以降。Windows 95 用の再配布可能なファイルとして利用可能。
> Windows CE:対応していません

「再配布可能なファイルとして利用可能」とは、どういうことですか??
この APIをコールする実行ファイルを、一般に配布して良いということですか?
0547デフォルトの名無しさんNGNG
>>546
具体的にどのAPIなんだYO
0548デフォルトの名無しさんNGNG
>>546
IE5に含まれるとか、そんな意味だろ。この場合、IE5は再配布可能だから、Win95
でも利用可能ということになる。
よく、対応情報の回りを読んでみそ。
■ このスレッドは過去ログ倉庫に格納されています