اگر دوستان در مورد gtk اطلاعات دارند لطفا بگویید که چگونه می توان اسکریپت های شل (مثلا sudo dpkg -i ****.deb )را با کد های gtk اجرا کردسوالتون واضح نیست.
اول سلام
می خوام توی زبان c باشه
در ضمن می خوام با کلیک کردن بروی یک button رمز کاربر root رو سوال کنه سپس این رمز به ترمینال بده تا بتونه دستورات زیر اجرا بشهcd /media/cdrom0/packages
sudo dpkg -i /media/cdrom0/packages/ssl-cert_1.0.14-0ubuntu2.1_all.deb
sudo dpkg -i /media/cdrom0/packages/openssl-blacklist_0.3.3+0.4-0ubuntu0.8.04.3_all.deb
zenity --entry --title="محل قرارگیری فایل" --text="آدرس فایل:" --entry-text="http://www."
man zenity
FILE *fp;
gint exit_status;
gchar *command = "???";
/* execute command */
fp = popen(command, "r");
if (fp == NULL)
{
g_print("Error running %s", command);
}
exit_status = pclose (fp);
g_print("Script exited with status %d", exit_status);
همه کاربران سلامبجای تابع popen از تابع system هم میتونید استفاده کنید.
به از جستجوهای فراوان در اینترنت توانستم چند خط کد زیر را پیدا کنم .کد: [انتخاب]FILE *fp;
gint exit_status;
gchar *command = "???";
/* execute command */
fp = popen(command, "r");
if (fp == NULL)
{
g_print("Error running %s", command);
}
exit_status = pclose (fp);
g_print("Script exited with status %d", exit_status);
از این کد بیشتر برای سیگنال استفاده می شد. در این کد بجای علامت سوال آدرس کامل فایل قرار میگیرد بطور مثال این آدرسhome/m/Desktop/xx.deb
حالا سوال دوم
با استفاده از رابط گرافیکی زیر چگونه میتوان رمز کاربر root گرفت وبه ترمینال داد(چگونه میتوان بارابط گرافیکی زیر وارد کاربر روت شد
http://upload.iranblog.com/6/1247180850.gif
همه کاربران سلام
به از جستجوهای فراوان در اینترنت توانستم چند خط کد زیر را پیدا کنم .کد: [انتخاب]FILE *fp;
gint exit_status;
gchar *command = "???";
/* execute command */
fp = popen(command, "r");
if (fp == NULL)
{
g_print("Error running %s", command);
}
exit_status = pclose (fp);
g_print("Script exited with status %d", exit_status);
از این کد بیشتر برای سیگنال استفاده می شد. در این کد بجای علامت سوال آدرس کامل فایل قرار میگیرد بطور مثال این آدرسhome/m/Desktop/xx.deb
حالا سوال دوم
با استفاده از رابط گرافیکی زیر چگونه میتوان رمز کاربر root گرفت وبه ترمینال داد(چگونه میتوان بارابط گرافیکی زیر وارد کاربر روت شد
http://upload.iranblog.com/6/1247180850.gif
gnome_password_dialog_get_type (void);
GtkWidget* gnome_password_dialog_new (const char *dialog_title,
const char *message,
const char *username,
const char *password,
gboolean readonly_username);
gboolean gnome_password_dialog_run_and_block (GnomePasswordDialog *password_dialog);
/* Attribute mutators */
void gnome_password_dialog_set_show_username (GnomePasswordDialog *password_dialog,
gboolean show);
void gnome_password_dialog_set_show_domain (GnomePasswordDialog *password_dialog,
gboolean show);
void gnome_password_dialog_set_show_password (GnomePasswordDialog *password_dialog,
gboolean show);
void gnome_password_dialog_set_username (GnomePasswordDialog *password_dialog,
const char *username);
void gnome_password_dialog_set_domain (GnomePasswordDialog *password_dialog,
const char *domain);
void gnome_password_dialog_set_password (GnomePasswordDialog *password_dialog,
const char *password);
void gnome_password_dialog_set_readonly_username (GnomePasswordDialog *password_dialog,
gboolean readonly);
void gnome_password_dialog_set_readonly_domain (GnomePasswordDialog *password_dialog,
gboolean readonly);
void gnome_password_dialog_set_show_remember (GnomePasswordDialog *password_dialog,
gboolean show_remember);
void gnome_password_dialog_set_remember (GnomePasswordDialog *password_dialog,
GnomePasswordDialogRemember remember);
GnomePasswordDialogRemember gnome_password_dialog_get_remember (GnomePasswordDialog *password_dialog);
void gnome_password_dialog_set_show_userpass_buttons (GnomePasswordDialog *password_dialog,
gboolean show_userpass_buttons);
/* Attribute accessors */
char * gnome_password_dialog_get_username (GnomePasswordDialog *password_dialog);
char * gnome_password_dialog_get_domain (GnomePasswordDialog *password_dialog);
char * gnome_password_dialog_get_password (GnomePasswordDialog *password_dialog);
gboolean gnome_password_dialog_anon_selected (GnomePasswordDialog *password_dialog);
وهمچنین
void e_passwords_init (void);
void e_passwords_shutdown (void);
void e_passwords_cancel(void);
void e_passwords_set_online(int state);
void e_passwords_remember_password (const char *component, const char *key);
void e_passwords_add_password (const char *key, const char *passwd);
char *e_passwords_get_password (const char *component, const char *key);
void e_passwords_forget_password (const char *component, const char *key);
void e_passwords_forget_passwords (void);
void e_passwords_clear_passwords (const char *component);
و در این صفحات یک مثال وجود دارد
http://gobby.0x539.de/trac/browser/src/passworddialog.cpp?rev=538eb0791fff0fe096872a736ce883fafcf485b3
http://www.tinymail.org/trac/tinymail/browser/trunk/libtinymailui-gtk/tny-gtk-password-dialog.c?rev=2825
gnome_password_dialog_get_password (GnomePasswordDialog *password_dialog);
و e_passwords_get_password (const char *component, const char *key);
حالا سوالی دیگر دارم امید وارم بتوانید کمک کنیدباید با تابع gtk_progress_bar_pulse کار کنید. فعلاً یه چیزی نوشتم که کار میکنه. ولی روی زمانبندیش باید کار کنید(من همینطوری سمبل کردم! کلی پروسه میگیره). فکر میکنم باید از timeout_signal که توی glib هست استفاده کنید. در ضمن باید مثلاً با فشردن یه دکمهای چیزی هم اون پنجره نشون داده بشه هم اینکه اون حلقه(که پالس میفرسته) شروع بشه. ولی من همینطوری قبل از gtk_main نوشتمش.
من می خواهم یک ProgressBar ایجاد کنم که فقط نشانگر آن حرکت رفت و برگشت داشته با شد و با آغاز عملیات نصب شروع شود و با پایان نصب بسته شود
در زیر یک عکس گذاشتم شبیه اون چیزی که می خوام فقط عکس رو با مرور گر اینترنت باز کنید
http://www.Free-Picture-Host.com/images/vI8Wsz1250219992.gif
// gcc `pkg-config --cflags --libs gtk+-2.0` progress.c -o progress
#include <stdlib.h>
#include <stdio.h>
#include <gtk/gtk.h>
//#include <time.h>
gint delete_event(GtkWidget *widget, GdkEvent *event, gpointer data){
exit(0);
//gtk_main_quit();
return 1;
}
int main(int argc , char **argv){
gtk_init(&argc, &argv);
int i=0;
GtkWidget *pbar, *win;
pbar=gtk_progress_bar_new();
win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(G_OBJECT(win), "delete_event", G_CALLBACK(delete_event), NULL);
gtk_container_add(GTK_CONTAINER(win), pbar);
gtk_widget_show_all(win);
for(i=0;;i++){
if(i%10000==0)
gtk_progress_bar_pulse(GTK_PROGRESS_BAR(pbar));
while(gtk_events_pending())
gtk_main_iteration_do(0);
//sleep(1);
//printf("%d\n", i);
}
gtk_main();
return 0;
}
void b23(GtkWidget *widget,gpointer data)
{
FILE *fp;
gint exit_status;
gchar *command = "gksu -- /home/m/Desktop/cd-tavasol/sh/opera.sh";
fp = popen(command, "r");
if (fp == NULL)
{
g_print("Error running %s", command);
}
exit_status = pclose (fp);
gtk_main_quit();
}
FILE *fp;
gint exit_status;
gchar *command = "gksu -- /home/m/Desktop/cd-tavasol/sh/tavasol8.04LTS.sh";
fp = popen(command, "r");
if (fp == NULL)
{
g_print("Error running %s", command);
}
exit_status = pclose (fp);
g_print("finish", exit_status);
سلامشکر خداوند مهربان تونستم کد مورد نیازم رو بنویسم
کسی نبود به من کمک کنه
سوالم این هست که می خوام وقتی توی کنسول تایپ شد(finish) سیگنالی ایجاد شود( که بتوانم برای کالبک آن دستور بسته شدن پنجره بنویسم)کد: [انتخاب]FILE *fp;
gint exit_status;
gchar *command = "gksu -- /home/m/Desktop/cd-tavasol/sh/tavasol8.04LTS.sh";
fp = popen(command, "r");
if (fp == NULL)
{
g_print("Error running %s", command);
}
exit_status = pclose (fp);
g_print("finish", exit_status);
read ("fin");
if ( "fin" )
{
g_print("ok");
}
در داخل کد به جای fin عبارتی که در کنسول تایپ می شود را بنویسید #include <gtk/gtk.h>
#include <stdlib.h>
gint delete_event(GtkWidget *widget,GdkEvent *event,gpointer data)
{
gtk_main_quit();
return FALSE;
}
void kkk(GtkWidget *widget,gpointer data)
{
int x=system("cd ~/Desktop;gksu -- sudo dpkg -i /home/m/Desktop/cdd/packages/amir05_beta_i386.deb"); //**
return 0;
}
int main(int argc , char *argv[])
{
gtk_init(&argc,&argv);
/*bفهرست اشیا*/
GtkWidget *window;
GtkWidget *button1;
/*bسفارشی کردن اشیا*/
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
button1= gtk_button_new_with_label ("tavasol");
gtk_container_add(GTK_CONTAINER(window),button1);
gtk_window_set_title(GTK_WINDOW(window),"WELCOME TO GTK+");
gtk_widget_set_size_request(GTK_WIDGET(window),450,250);
gtk_window_set_resizable(GTK_WINDOW(window),FALSE);
/*bسیگنال بسته شدن*/
g_signal_connect(G_OBJECT(window),"delete-event",G_CALLBACK(delete_event),NULL);
/*bسیگنال کلیک*/
g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(kkk),NULL);
/*bنمایش اشیا*/
gtk_widget_show(window);
gtk_widget_show(button1);
gtk_main();
return 0;
}