PDA

View Full Version : API ها ی Windows



saeedIRHA
پنج شنبه 04 خرداد 1385, 19:38 عصر
سلام دوستان،
در JAVA چطور میشه API های Windows رو فراخوانی کرد؟!
ممنون!

hps
پنج شنبه 04 خرداد 1385, 21:56 عصر
اگر کلاس‌های JFC مقصود شما رو برآورده نمی‌کنند به JNI رجوع کنید.

saeedIRHA
جمعه 05 خرداد 1385, 06:20 صبح
سلام،
من هرچی گشتم برای JFC فقط تونستم توابع گرافیکی رو پیدا کنم
و هرچی هم برایه JNI بود مربوط میشد به طریقه ی استفاده کردن Hear C در JAVA.
و متأسفانه هیچ کدام جواب من نبود،
چون من میخوام از یکسری توابع در Kernel32.dll و User32.dll استفاده کنم!!!
اگر دوستم کمک کنن واقعاً ممنون میشام !

persianshadow
جمعه 05 خرداد 1385, 07:10 صبح
ببینید باید از JNI - java native Interface استفاده کنید. این تکنولوژی هم بدین شکل هست که

شما بوسیله یک زبان دیگر برنامه خودتون رو که باید از توابع ویندوز استفاده کنید می نویسید و

به برنامه جاوا الحاق کنید. بزرگترین مشکل هم اینه که برنامه شما دیگه مستقل از پلتفرم

نخواهد بود. کافیه تصمیم بگیرد که می خواهید اون برنامه رو با چی بنویسید. بعد در گوگل

جستجو کنید :

delphi + jni + java

تا کلی مقاله درباره این موضوع بیاد.

Inprise
جمعه 05 خرداد 1385, 10:03 صبح
Header توابعت مورد نظرت رو از MSDN بردار ، از JNI استفاده کن ؛ ولی عموما" یه برنامه نویس جاوا ، با فرهنگ عمومی که جاوا داره ، به JNI نیاز پیدا نمیکنه ، مگر در مواقعی که قراره از یک چیز Legacy حمایت کنه که بعیده تو در این وضعیت باشی .

persianshadow
جمعه 05 خرداد 1385, 16:21 عصر
صحبت Inprise کاملا درست هست. شما با این کار فلسفه وجودی جاوا رو زیر سوال می برید !

fat_roze2000
یک شنبه 23 مهر 1385, 06:35 صبح
صحبت Inprise کاملا درست هست. شما با این کار فلسفه وجودی جاوا رو زیر سوال می برید !
فرمایش شما متین. ولی آیا راه حلی هست که بشه امکاناتی شبیه امکانات توابع API داشت و مستقل از Platform بود. منظورم تعدادی jar و ...

persianshadow
یک شنبه 23 مهر 1385, 08:23 صبح
خب کار مورد نظرتون رو بگید تا ببینیم آیا تویه جاوا راه حل داره یا نه ؟

saeedIRHA
یک شنبه 23 مهر 1385, 18:48 عصر
سلام،
مثلاً باز و بسته کردن CD-rom و بدست آوردن PID ها و امثالهم.....
با تشکر.

pooyanm
دوشنبه 24 مهر 1385, 02:30 صبح
فرمایش شما متین. ولی آیا راه حلی هست که بشه امکاناتی شبیه امکانات توابع API داشت و مستقل از Platform بود. منظورم تعدادی jar و ...
بودنی هست! چند وقت پیش که دنبال مطالبی مربوط به رجیستری بودم یک پروژه این چنینی دیدم والبته مستقل از Platform که چون حجم زیادی داشت از اون صرف نظر کردم ولی چیز نسبتا کاملی بود نمی دونم کجا بود فقط یادم هست توی codecomments.com یکی اون را معرفی کرده بود.
سلام،
مثلاً باز و بسته کردن CD-rom و بدست آوردن PID ها و امثالهم.....
با تشکر.
اگر مطمئنی که برنامه فقط در یک سیستم عامل خاص اجرا خواهد شد یک روش اینه که یک برنامه مثلا در ویندوز بنویسی برای سرویس های وابسته که فقط در صورتی که پارامتر صحیح دریافت کنه سرویس درخواستی را اجرا کنه و این برنامه را با Runtime.exec() اجرا کنی. برای ویرایش رجیستری هم می تونی regedit /s را با یک فایل متنی به عنوان پارامتر با همین روش اجرا کنی.

saeedIRHA
دوشنبه 24 مهر 1385, 05:03 صبح
سلام دوسته من ،
مرسی از جوابت، اما من از نحوه استفاده کردن از Runtime.exec مطلع هستم،
فقط میخوام بدونم راه دیگه ای هم داره یا خیر!؟؟
با تشکر

Mamdos
دوشنبه 24 مهر 1385, 05:08 صبح
برای ویرایش رجیستری هم می تونی regedit /s را با یک فایل متنی به عنوان پارامتر با همین روش اجرا کنی.

البته جاوا برای ذخیره کردن اطلاعات در رجیستری یک API داره به اسم Preferences API که دقیقا نمیدونم چه طور باید باهاش کار کرد.

pooyanm
دوشنبه 24 مهر 1385, 14:45 عصر
البته جاوا برای ذخیره کردن اطلاعات در رجیستری یک API داره به اسم Preferences API که دقیقا نمیدونم چه طور باید باهاش کار کرد.
اینطوری:



import java.util.prefs.Preferences;
public class WindowsRegistryVsPref {
public static void main(String[] args) {
try {
String title = "Frame Title";
int width = 800;
int height = 600;
Preferences prefs = Preferences.userNodeForPackage(javax.swing.JFrame. class);//HKEY_CURRENT_USER\Software\JavaSoft\Prefs
//prefs= Preferences.systemNodeForPackage(javax.swing.JFram e.class);//HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
// write
prefs.put("title", title);
prefs.putInt("width", width);
prefs.putInt("height", height);
prefs.flush();
prefs = Preferences.userNodeForPackage(javax.swing.JFrame. class);
// read
title = prefs.get("title", null);
width = prefs.getInt("width", 0);
height = prefs.getInt("height", 0);
System.out.println("title: " + title + "\nwidth:" + width + "\nheight:" + height);
}
catch (Exception e) {
e.printStackTrace();
}

}
}

فقط تنها مشکلی که پیش میاد اینه که دسترسی فقط برای دو HKEY و همان مسیر Java Soft\Pref فوق الذکر فراهمه. به عبارت دیگه اینا در Linux و... هم جواب میدن ولی نه در رجیستری بلکه در هر سیستم عامل به روش منحصر به خود. بنابراین برای دسترسی به HKey های دیگر ناچار به استفاده از روش JNI و یا اجرای regedit /s filename.reg هستیم.



فقط میخوام بدونم راه دیگه ای هم داره یا خیر!؟؟ راه حل دیگه ای سراغ ندارم به جز جستجوی یک Library برای هر کاربرد خاص در گوگل.